GOF23设计模式之状态模式(state)
一、状态模式概述
用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。
结构:
(1)Context 环境类
环境类中维护一个 State 对象,它定义了当前的状态。
(2)State 抽象状态类
(3)ConcreteState 具体状态类
每一个类封装了一个状态对应的行为。
二、状态模式场景导入
酒店系统中,房间的状态变化:
(1)空闲状态
(2)已预订状态
(3)已入住状态
当遇到需要频繁修改状态的状况时,就可以考虑使用状态模式。
三、状态模式示例代码
/**
* 状态接口
* @author CL
*
*/
public interface State {
void handle();
}
/**
* 房间空闲状态
* @author CL
*
*/
public class FreeState implements State { @Override
public void handle() {
System.out.println("房间空闲,可以预定!");
} }
/**
* 房间预定状态
* @author CL
*
*/
public class BookedState implements State { @Override
public void handle() {
System.out.println("房间已预订,可以入住!");
} }
/**
* 房间已入住状态
* @author CL
*
*/
public class CheckedInState implements State { @Override
public void handle() {
System.out.println("房间已入住,不能预定!");
} }
测试:
/**
* 测试状态模式
* @author CL
*
*/
public class Client { public static void main(String[] args) {
HomeContext hc = new HomeContext(); //修改为空闲状态
hc.setState(new FreeState()); //修改为已预订状态
hc.setState(new BookedState()); //修改为已入住状态
hc.setState(new CheckedInState());
}
}
控制台输出:
修改状态:房间空闲,可以预定!
修改状态:房间已预订,可以入住!
修改状态:房间已入住,不能预定!
四、状态模式常见开发应用场景
(1)银行系统中账号状态的管理;
(2)OA 系统中公文状态的管理;
(3)酒店系统中,房间状态的管理;
(4)线程对象各状态之间的切换;
(5)…………
GOF23设计模式之状态模式(state)的更多相关文章
- 【转】设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...
- 设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...
- 乐在其中设计模式(C#) - 状态模式(State Pattern)
原文:乐在其中设计模式(C#) - 状态模式(State Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 状态模式(State Pattern) 作者:webabcd 介绍 允 ...
- 北风设计模式课程---状态模式State(对象行为型)
北风设计模式课程---状态模式State(对象行为型) 一.总结 一句话总结: 状态模式 具体状态的行为在具体的状态类中就解决,不用交给外部做判断.实质是将多条件判断弄成了多个类,在不同的类中做判断 ...
- 二十四种设计模式:状态模式(State Pattern)
状态模式(State Pattern) 介绍允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它所属的类. 示例有一个Message实体类,对它的操作有Insert()和Get()方法, ...
- 设计模式2——状态模式State
参考链接: 设计模式之状态模式:https://www.cnblogs.com/haoerlv/p/7777789.html 设计模式系列之状态模式:https://www.jianshu.com/p ...
- 【GOF23设计模式】状态模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_状态模式.UML状态图.酒店系统房间状态.线程对象状态切换 package com.test.state; public ...
- 设计模式之状态模式(State)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 设计模式之 -- 状态模式(State)
状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类.当控制一个对象的状态转换条件分支语句(if...else或switch...case)过于复杂时,可以此模式将状态的判断逻辑 ...
随机推荐
- APUE学习笔记——5.2流与文件对象、fwide
1 流 当一个文件被打开时,可以获得文件描述符.通过文件描述符可以对文件进行I/O操作.而I/O操作是通过流完成的. 流的定向: 在Unix系统中,使用 ASCII标准 ...
- pgpool安装配置整理
安装PostgreSQL并配置三节点流复制环境,就不仔细说了,大致步骤如下: 1.下载源码 2.解压安装,如果在./configure --prefix=/usr/pgsql-10执行时提示要--wi ...
- C#设置System.Net.ServicePointManager.DefaultConnectionLimit,突破Http协议的并发连接数限制
在Http协议中,规定了同个Http请求的并发连接数最大为2. 这个数值,可谓是太小了. 而目前的浏览器,已基本不再遵循这个限制,但是Dot Net平台上的 System.Net 还是默认遵循了这个标 ...
- web.xml文件模板
Servlet 2.3 deployment descriptor 注:web.xml中提示错误The content of element type "web-app" mus ...
- Mac OS 升级到10.12问题 Android ADT 下载SDK问题 https://dl-ssl.google.com refused...
缘由: 更新sdk,遇到了更新下载失败问题: Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml Fetch ...
- 大牛deep learning入门教程
雷锋网(搜索"雷锋网"公众号关注)按:本文由Zouxy责编,全面介绍了深度学习的发展历史及其在各个领域的应用,并解释了深度学习的基本思想,深度与浅度学习的区别和深度学习与神经网络之 ...
- tableView 三级展开 嵌入collocationView
目前有个需求,需要在写一个文件夹结构的类型,tableView分类显示 collocationView 遇到的问题是:tableView cell中嵌套了 collocationView 后,coll ...
- OPEN(SAP) UI5 学习入门系列之四:更好的入门系列-官方Walkthrough
好久没有更新了,实在不知道应该写一些什么内容,因为作为入门系列,实际上应该更多的是操作而不是理论,而在UI5 SDK中的EXPLORER里面有着各种控件的用法,所以在这里也没有必要再来一遍,还是看官方 ...
- Uncaught TypeError: jQuery.i18n.browserLang is not a function
/********************************************************************* * Uncaught TypeError: jQuery. ...
- Windows2008操作系统 IIS7 IIS7.5 进程池经常死最终解决方案
作为一个服务器维护人员,经常遇到不可解决的问题,这问题一直存在,一直困扰我多时,经常凌晨1-2点起床,就为了重启一下进程池 错误应用程序名称: w3wp.exe,版本: 7.5.7600.16385, ...