zoukankan      html  css  js  c++  java
  • 设计模式之GOF23状态模式

    状态模式state

    场景:当具有许多状态并且需要频繁改变时,用这种模式

    -电梯的运行:维修,正常,自动关门,自动开门,向上运行,向下运行,消防状态

    -红绿灯:红灯,黄灯,绿灯

    -企业或政府系统:公文的审批状态

    -网上购物时,订单的状态:下单,已付款,送货中,已收货

    核心:用于解决系统中复杂对象的状态转换及不同状态下行为的封装问题

    结构:Context环境类上下文(维护一个State对象,定义了当前的状态),State抽象状态类,ConcreteState具体状态类(每一个类封装了一个状态对应的行为)

    开发中常见场景:

    -银行系统中账号状态的管理

    -OA系统中公文状态的管理

    -酒店系统中,房间状态的管理

    -线程对象各状态之间的切换

    例子:酒店房间不同状态

    状态图

     

    public interface State {
      void handler();
    }
    class FreeState implements State{
     @Override
     public void handler() {
      System.out.println("空闲房间,可入住");
     }
    }
    class Booked implements State{
     @Override
     public void handler() {
      System.out.println("已预定");
     }
    }
    class Checked implements State{
     @Override
     public void handler() {
      System.out.println("已入住");
     }
    }

    /**
     * 上下文类
     * 房间
     * @author 小帆敲代码
     *
     */
    public class RoomContext {  
      private State state;
      public void setState(State s) {
       state=s;
       System.out.println("修改状态!");
       state.handler();
      }
    }

    public class Client {
     public static void main(String[] args) {
       RoomContext rc=new RoomContext();
       rc.setState(new FreeState());
       rc.setState(new Booked());
     }
    }
  • 相关阅读:
    第十二周学习进度条
    课堂练习四
    搜狗输入法
    第十一周学习进度条
    《代码大全(第二版)》阅读笔记01
    典型用户及用户场景描述
    第十周学习进度条
    团队冲刺第六天
    团队冲刺第五天
    团队冲刺第四天
  • 原文地址:https://www.cnblogs.com/code-fun/p/11366145.html
Copyright © 2011-2022 走看看