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();
            
        }
    
    }

      

  • 相关阅读:
    C# 从类库中获取资源图片,把图片资源保存到类库中
    C# Bitmap/png转成jpg格式,压缩图片
    C# 窗体间传值(使用委托与自定义事件)
    C# Image与Base64编码互转函数
    简单Tomcat HTTP RPC框架
    Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
    Java序列化机制和原理
    攻破JAVA NIO技术壁垒
    代理模式(Proxy)
    Java序列化与反序列化
  • 原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10298300.html
Copyright © 2011-2022 走看看