设计模式(十九):状态模式

165 阅读1分钟

介绍

在状态模式(State Pattern)属于行为型模式。它的类的行为是基于它的状态改变的。我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context/state 对象。状态模式和命令模式一样,也可以用于消除if...else 等条件选择语句。

优点

  • 代替分支操作条理清晰
  • 封装了转换规则
  • 减少了对象的创建

缺点

  • 实现复杂
  • 不太符合开闭原则

应用

Android中的WIFI、蓝牙、上下文的获取,分支操作经常拓展的时候

实现

关键代码:状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。

interface State{
    public void action();
}

 class WakeState implements State{

    public void action(){
        System.out.println("work");
    }

 }

 class SleepyState implements State{

    public void action(){
        System.out.println("sleep");
    }

 }

 class Person{

    public State state ;

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

    public void action(){
        state.action();
    }
 }

 class StateDemo{
    public static void main(String[] args) {

        Person person = new Person();
        person.setState(new WakeState());
        person.action();

        person.setState(new SleepyState());
        person.action();;

    }
 }
work
sleep