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

    一、状态模式概述

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

      结构:

        (1)Context 环境类

            环境类中维护一个 State 对象,它定义了当前的状态。

        (2)State 抽象状态类

        (3)ConcreteState 具体状态类

            每一个类封装了一个状态对应的行为。

    二、状态模式场景导入

      酒店系统中,房间的状态变化:

        (1)空闲状态

        (2)已预订状态

        (3)已入住状态

      当遇到需要频繁修改状态的状况时,就可以考虑使用状态模式。

    三、状态模式示例代码

    1 /**
    2  * 状态接口
    3  * @author CL
    4  *
    5  */
    6 public interface State {
    7     void handle();
    8 }
     1 /**
     2  * 房间空闲状态
     3  * @author CL
     4  *
     5  */
     6 public class FreeState implements State {
     7 
     8     @Override
     9     public void handle() {
    10         System.out.println("房间空闲,可以预定!");
    11     }
    12 
    13 }
     1 /**
     2  * 房间预定状态
     3  * @author CL
     4  *
     5  */
     6 public class BookedState implements State {
     7 
     8     @Override
     9     public void handle() {
    10         System.out.println("房间已预订,可以入住!");
    11     }
    12 
    13 }
     1 /**
     2  * 房间已入住状态
     3  * @author CL
     4  *
     5  */
     6 public class CheckedInState implements State {
     7 
     8     @Override
     9     public void handle() {
    10         System.out.println("房间已入住,不能预定!");
    11     }
    12 
    13 }

      测试:

     1 /**
     2  * 测试状态模式
     3  * @author CL
     4  *
     5  */
     6 public class Client {
     7 
     8     public static void main(String[] args) {
     9         HomeContext hc = new HomeContext();
    10         
    11         //修改为空闲状态
    12         hc.setState(new FreeState());
    13     
    14         //修改为已预订状态
    15         hc.setState(new BookedState());
    16         
    17         //修改为已入住状态
    18         hc.setState(new CheckedInState());
    19     }
    20 }

      控制台输出:

    修改状态:房间空闲,可以预定!
    修改状态:房间已预订,可以入住!
    修改状态:房间已入住,不能预定!

    四、状态模式常见开发应用场景

      (1)银行系统中账号状态的管理;

      (2)OA 系统中公文状态的管理;

      (3)酒店系统中,房间状态的管理;

      (4)线程对象各状态之间的切换;

      (5)…………

  • 相关阅读:
    最先与最后(鲁迅)
    GPS固定数据输出语句($GPGGA)
    网络流量测量软件的设计与实现
    塑料模型毕业设计论文
    周末去牛街!
    周口店猿人遗址!
    总有一些东西让我们泪流满面
    不行了,回去休息
    过完节回到北京了
    算法竞赛专题解析(0)写作计划
  • 原文地址:https://www.cnblogs.com/cao-lei/p/8334305.html
Copyright © 2011-2022 走看看