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();
            }
        }
    
    }
  • 相关阅读:
    每天一道LeetCode--141.Linked List Cycle(链表环问题)
    每天一道LeetCode--119.Pascal's Triangle II(杨辉三角)
    每天一道LeetCode--118. Pascal's Triangle(杨辉三角)
    CF1277D Let's Play the Words?
    CF1281B Azamon Web Services
    CF1197D Yet Another Subarray Problem
    CF1237D Balanced Playlist
    CF1239A Ivan the Fool and the Probability Theory
    CF1223D Sequence Sorting
    CF1228D Complete Tripartite
  • 原文地址:https://www.cnblogs.com/moveofgod/p/12542401.html
Copyright © 2011-2022 走看看