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)过于复杂时,可以此模式将状态的判断逻辑 ...
随机推荐
- js中字符串与数组的相互转换
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- http请求的GET和POST请求:查询和新增(server.php)
<?php //设置页面内容是html编码格式是utf-8 header("Content-Type: text/plain;charset=utf-8"); //heade ...
- 在 Bash on Ubuntu 上安装Nginx
前言 Win10 上的 Bash on Ubuntu 是个很好用的玩具,让windows开发环境下的人能无缝操练Linux,但是涉及到网络部分还是有很多要该进的地方,比如Nginx的安装就遇到了问题. ...
- Appium测试Webview
通常情况下我们都是通过Android自带的tools下的UI automator viewer来获取控件或元素的xpath.class.id等来直接进行定位 如下面的“用户登录”按钮: 但是有一些并不 ...
- C# Http方式下载文件到本地类
直接上代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...
- L163
Chickens slaughtered in the United States, claim officials in Brussels, are not fit to grace Europea ...
- ASP.NET MVC 中使用用户控件——转
讲讲怎么在 ASP.NET MVC2中使用用户控件.首先我们新建一个用户控件, 我们命名为SelectGroup.ascx,代码如下 <%@ Control Language="C ...
- Makefile.am文件的实例讲解
Makefile.am是一种比Makefile更高层次的编译规则,可以和configure.in文件一起通过调用automake命令,生成Makefile.in文件,再调用./configure的时候 ...
- Python环境准备(安装python解释器)
上篇文章介绍了Python的相关知识,本章就开始着手操作,创建第一个Python程序,在这之前,首先需要配置Python的运行环境,也就是安装python解释器 ------------- 完美的分割 ...
- SoftmaxWithLoss函数和师兄给的loss有哪些区别呢
师兄的: NG教程中提到的: