zoukankan      html  css  js  c++  java
  • 设计模式第18篇:状态设计模式

    一.状态设计模式介绍

      如果我们基于一个对象的状态来改变对象的行为,通常会在该对象中用if else或switch case语句对状态进行分类,当状态增加时还需要修改源码中的if或switch语句,很显然系统耦合性很高,违反的开闭原则。状态设计模式就是用来解决这个问题,通过状态(State)接口的实现以及引用状态的类(Context)来实现松耦合的目标。

    二.状态设计模式代码用例

      以电视遥控器为例,电视遥控器上的ON按钮表示打开电视,OFF按钮表示关闭电视。

      1.状态接口State(状态接口只有行为)

    interface State {
    
        public void doAction();
    }

      2.具体状态的实现(不同状态对应的不同实现)TVStartState、TVStopState。

    class TVStartState implements State {
    
        @Override
        public void doAction() {
            System.out.println("TV is turned ON");
        }
    
    }
    
    class TVStopState implements State {
    
        @Override
        public void doAction() {
            System.out.println("TV is turned OFF");
        }
    
    }

      3.引用状态的类TVContext(拥有对状态对象的索引)

    class TVContext implements State {
    
        private State tvState;
    
        public void setState(State state) {
            this.tvState=state;
        }
    
        public State getState() {
            return this.tvState;
        }
    
        @Override
        public void doAction() {
            this.tvState.doAction();
        }
    
    }

      4.测试类

    public class StatePatternTest {
    
        public static void main(String[] args) {
            TVContext context = new TVContext();
            State tvStartState = new TVStartState();
            State tvStopState = new TVStopState();
            
            context.setState(tvStartState);
            context.doAction();
            
            
            context.setState(tvStopState);
            context.doAction();
            
        }
    
    }

      

  • 相关阅读:
    用迭代法求x=a−−√。求平方根的迭代公式为 xn+1 = 12(xn + axn) 要求前后两次求出的x的差的绝对值小于10−5
    C 数组
    fofa自动化爬虫脚本更新+详解
    c# winfrom接收http协议body数据
    FLW要求
    modbus工具问题
    2020年总结
    WIFI K型热电偶传感器
    泛海三江烟感JTY-GD-H361 V2.7
    工位终端
  • 原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10298300.html
Copyright © 2011-2022 走看看