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();
            }
        }
    
    }
  • 相关阅读:
    空间解析几何与向量代数(复习笔记)
    OpenGL数据类型
    Symbian c++ 调用标准C产生内存泄露
    symbian c++调用标准c函数方法
    (转载)一篇对理解OpenGL的描述的文章
    (个人摘要)make工具的用法
    (转载)哈佛大学凌晨4点半的景象
    网页抓取中的debug 问题记录
    split 使用
    三、抽象工厂(Abstract Factory)模式
  • 原文地址:https://www.cnblogs.com/moveofgod/p/12542401.html
Copyright © 2011-2022 走看看