zoukankan      html  css  js  c++  java
  • 状态模式(State)(开关灯,状态实例为类,不同状态,不同行为)

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

        在软件开发过程中,很多对象也会像水和信号灯一样具有多种状态,这些状态在某些情况下能够相互转换,而且对象在不同的状态下也将有不同的行为。最直接的解决方案是将所有可能考虑到,然后使用if else 语句来进行不同情况的处理,但是这种硬编码方法在对待复杂状态的判断就显得力不从心了,增加新的状态或修改一个状态都有可能会导致原有的程序大幅度·的修改。

            我们可以将不同的状态设为对应的状态对象,再将状态抽象化调用,便不必考虑复杂的状态逻辑。

            现在我们来用状态模式描述灯的亮与暗即状态转换。

    抽象状态接口类:

    1 public interface LightState {
    2 public void PressSwitch(Light light);//每种状态可以向其他状态转换   需要将灯的实体传入状态 类  以便于状态类对灯进行更多的动作
    3 }

    具体状态类:

    1 public class LightOff implements LightState {
    2 
    3     @Override
    4     public void PressSwitch(Light light) {
    5      System.out.println("现在灯暗着");
    6      light.setState(new LightOn());
    7     }
    8 
    9 }
    1 public class LightOn implements LightState {
    2 
    3     @Override
    4     public void PressSwitch(Light light) {
    5       System.out.println("现在灯亮着");
    6       light.setState(new LightOff());
    7     }
    8 
    9 }

    山下文角色:

     1 public class Light {
     2 private LightState state;//灯存在属性为它的状态
     3 
     4 public Light(LightState state) {
     5     super();
     6     this.state = state;
     7 }
     8 
     9 public LightState getState() {
    10     return state;
    11 }
    12 
    13 public void setState(LightState state) {
    14     this.state = state;
    15 }
    16 /*
    17  *     light   自身并无太多功能     不同状态的行为依托于具体的状态 将自身需要传入并调用具体状态的方法操作自身
    18  */
    19 public void pressSwhitch(){
    20     state.PressSwitch(this);
    21 }
    22 }

    客户测试类:

     1 public class StatePattern {
     2 
     3     public static void main(String[] args) {
     4     Light light = new Light(new LightOff());//创建实体灯并附初始状态暗着
     5     
     6     light.pressSwhitch();
     7     light.pressSwhitch();
     8 
     9     }
    10 
    11 }

    运行结果:

    现在灯暗着
    现在灯亮着
  • 相关阅读:
    github的使用
    QPalette的用法
    QTimer的用法
    QStatusBar的用法
    QWhatsThis的用法
    QString::​arg的用法
    qt中ui的 使用介绍
    安全协议IPSEC
    安全协议ssl
    对称加密和非对称加密
  • 原文地址:https://www.cnblogs.com/the-wang/p/7289778.html
Copyright © 2011-2022 走看看