设计模式之状态模式(State Pattern)

2021-12-19  本文已影响0人  ZHG

设计模式中有六大原则和二十三设计模式。
其中六大原则分别为:单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则。
二十三设计模式:单例模式、Builder 模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察者模式、备忘录模式、迭代器模式、模版方法模式、访问者模式、中介模式、代理模式、组合模式、适配器模式、装饰模式、享元模式、外观模式、桥接模式。

状态模式中的行为是由状态来决定的,不同状态下有不同的行为。 状态模式和策略模式的结构几乎一样,但是他们的本质和目的是不同的。状态模式的行为是平行的、不可替换的;策略的模式是彼此独立的、可以相互替换的。

定义

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

使用场景

优缺点[1]

优点

缺点

UML 图

状态模式.png

代码实现

/**
 * 状态接口
 */
public interface State {
    public void method1();
    public void method2();
}
/**
 * 当ON 的时候执行
 */
public class ConcreteStateA implements State {
    public void method1() {
        System.out.println("是ON 状态,可以执行method1");
    }

    public void method2() {
        System.out.println("是ON 状态,可以执行method2");
    }
}
/**
 * 当 OFF 的时候执行
 */
public class ConcreteStateB implements State {
    public void method1() {
        System.out.println("是 OFF 状态,可以执行method1");
    }

    public void method2() {
        System.out.println("是 OFF 状态,可以执行method2");
    }
}
/**
 * 环境类
 */
public class Controller implements State {
    private State state;

    private void setState(State state) {
        this.state = state;
    }

    public void on(){
        this.setState(new ConcreteStateA());
    }

    public void off(){
        this.setState(new ConcreteStateB());
    }

    public void method1() {
        this.state.method1();
    }

    public void method2() {
        this.state.method1();
    }
}
  public static void main(String[] args) {
        Controller controller =new Controller();
        controller.on();
        controller.method1();
        controller.method2();
        controller.off();
        controller.method1();
        controller.method2();
    }
是ON 状态,可以执行method1
是ON 状态,可以执行method1
是 OFF 状态,可以执行method1
是 OFF 状态,可以执行method1

总结

状态模式主要是不同状态下对相同的行为有不同的响应,减少if-else、switch-case 的使用。在我们开发中需要根据业务需求,合理使用设计模式,不要为了使用而使用。
DEMO

参考:《Android 源码设计模式解析与实践》

上一篇 下一篇

猜你喜欢

热点阅读