zoukankan      html  css  js  c++  java
  • 08 状态模式 state

    红绿灯, 根据不同的状态有不同的行为

    类似 策略模式, 一个接口封装的是策略,然后不同的策略(类)实现这个接口

    这里是, 一个接口封装的是状态,然后不同的状态(类)实现这个接口

    参考 设计模式重点版 常用 10 中的.

    用于解决系统中复杂对象的状态转换, 需要多外输出不同的行为

    主要对象

    Context环境类, 聚合维护一个 State 对象,它定义了当前状态

    State 一个接口: 封装了一个抽象行为 Handle()

    ConcreteState 具体状态类, 每一个类封装了一个状态对应的行为(与 Context 的一个状态的相关行为).

    举例: 一个 APP 抽奖获得

     这样的话, 相当于每一个状态都是一个类.

    代码有点麻烦, 还是用灯的例子吧 

    灯的例子, 开, 关 两种状态

    package com.leon.design;
    
    public abstract class State {
        public abstract void switchButton(LightContext lc);
    }
    
    package com.leon.design;
    
    public class OnState extends State {
    
        @Override
        public void switchButton(LightContext lc) {
            System.out.println("现在light是开状态, 关闭了电灯...");
            lc.currentState = lc.offState;
        }
    
    }
    
    package com.leon.design;
    
    public class OffState extends State {
    
        @Override
        public void switchButton(LightContext lc) {
            System.out.println("现在light是关闭状态, 打开了电灯...");
            lc.currentState = lc.onState;
        }
    
    }
    
    package com.leon.design;
    
    public class LightContext {
        State currentState;
        
        State onState = new OnState();
        State offState = new OffState();
        
        public LightContext() {
            this.currentState = offState;
        }
        
        public void DoClike() {
            currentState.switchButton(this);
        }
        
    }
    
    package com.leon.design;
    
    public class StateClient {
    
        public static void main(String[] args) {
            
            LightContext lc = new LightContext();
            for (int i = 0; i < 3; i++) {
                lc.DoClike();
            }
        }
    
    }
  • 相关阅读:
    深度学习
    !gcc !vi
    条件、循环及其他语句
    当索引行不通时
    我的排班日期
    Linux使用storcli工具查看服务器硬盘和raid组信息
    storcli64和smartctl定位硬盘的故障信息
    Shell-四剑客
    iostat
    /VAR/LOG/各个日志文件分析
  • 原文地址:https://www.cnblogs.com/moveofgod/p/12542401.html
Copyright © 2011-2022 走看看