设计模式-状态模式


状态模式的定义

*状态(State)模式: * 对有状态的对象,把复杂的”判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为

特点

1. 优点

  • 状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”
  • 减少对象间的相互依赖.将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖
  • 有利于程序的扩展。通过定义新的子类很容易地增加新的状态和转换

2. 缺点

  • 状态模式的使用必然会增加系统的类与对象的个数。
  • 状态模式的结构与实现都较为复杂,如果使用不当会导致程序结构和代码的混乱。

模式的结构与实现

1. 模式的结构

  • **环境(Context)角色:也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。

  • 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为。

  • 具体状态(Concrete State)角色:实现抽象状态所对应的行为

    状态模式结构图

2. 模式的实现

//环境类
class Context{
    private State state;
    public Context() {
        this.state = new ConcreteStateA();
    }
    //获取状态
    public State getState() {
        return state;
    }
    //设置新状态
    public void setState(State state) {
        this.state = state;
    }
    public void handle(){
        state.handle(this);
    }
}
//抽象状态
abstract class State{
    public abstract void handle(Context context);
}
//具体状态类A
class ConcreteStateA extends State{
    @Override
    public void handle(Context context) {
        System.out.println("当前状态是A!");
        context.setState(new ConcreteStateB());
    }
}
//具体状态类B
class ConcreteStateB extends State{
    @Override
    public void handle(Context context) {
        System.out.println("当前状态是B!");
        context.setState(new ConcreteStateA());
    }
}
//测试
public class StatePattern {
    public static void main(String[] args) {
        Context context=new Context();    //创建环境
        context.handle();    //处理请求
        context.handle();
        context.handle();
        context.handle();
    }
}

文章作者: Bryson
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Bryson !
评论
 上一篇
设计模式-观察者模式 设计模式-观察者模式
观察者模式的定义 观察者(Observer)模式: ** 指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并被自动更新,这种模式又称为发布-订阅模式丶模型-视图模式**,它是对象行为模式 在Jav
2020-05-07
下一篇 
设计模式-责任链模式 设计模式-责任链模式
责任链模式的定义 责任链(Chain of Responsibility)模式: ** 也叫 **职责链模式 为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链,当请求发生时,可将
2020-05-04
  目录