• 设计模式第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();
            
        }
    
    }

      

  • 相关阅读:
    理解事件驱动select,poll,epoll三种模型
    谈谈对线程与进程的理解
    5-3.首行缩进
    5-2.行高
    5-1.字间距
    4-6.字体样式重置
    4-5.字体风格
    4-4.字体粗细
    4-3.字体颜色设置
    4-2.字体设置
  • 原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10298300.html
Copyright © 2020-2023  润新知