什么是状态模式(State)?
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
- 意图
允许对象的内部状态改变时,改变其行为。 - 类图
- 实例
interface State {/*** 执行* @param ctx 记录状态*/void exc(Context ctx);/*** 打印name* @param name 名称*/void name (String name);}static class State1 implements State {@Overridepublic void exc(Context ctx) {ctx.setSt(this);}@Overridepublic void name (String name) {System.out.println("state1 --- " + name);}}static class State2 implements State {@Overridepublic void exc(Context ctx) {ctx.setSt(this);}@Overridepublic void name (String name) {System.out.println("state2 --- " + name);}}static class Context {private State st;public State getSt() {return st;}public void setSt(State st) {this.st = st;}}
- 测试
public static void main(String[] args) {LinkedList<State> stL = new LinkedList<>();stL.offer(new State1());stL.offer(new State2());// 对象的装载与调用应该是分开的,要不然起不到相应的作用,当然这种规则应该属于职责链范畴String name = "myName";Context ctx = new Context();stL.forEach(st -> {// 对象状态改变与行为调用的方法都应该是接口定义的规范,如果是合成模式,就可以做到分层调用的一致性// 再加上状态模式就是特别好的组合了st.exc(ctx);ctx.getSt().name(name);});}
运行结果:
state1 --- myName
state2 --- myName
想看更多吗?请访问:设计模式
什么是状态模式(State)?相关推荐
- php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)
状态模式 (State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类.其别名为状态对象(Objects for States) (一)为什么需要状态模式 ...
- c++状态模式state
c++状态模式state 概念 角色和职责 案例 概念 State模式也叫状态模式,是行为设计模式的一种.State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样 ...
- 【转】设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...
- 状态模式(State)-七十二变
状态模式(State)-老孙七十二变 俺老孙来也-我是如来佛祖玉皇大帝观音菩萨指定取西经特派使者花果山水帘洞美猴王齐天大圣孙悟空啊!老孙的必杀技就是七十二变,没错比老外的变相怪杰还有牛逼许多. 关于老 ...
- 设计模式之状态模式(State)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)
说到状态模式,如果你看过之前发布的重构系列的文章中的<代码重构(六):代码重构完整案例>这篇博客的话,那么你应该对"状态模式"并不陌生,因为我们之前使用到了状态模式进行 ...
- 《研磨设计模式》chap18 状态模式state(1)模式简介
场景:投票管理 1. 正常编码 //投票管理 public class VoteManager {//记录用户投票的结果,Map<String,String>对应Map<用户名称,投 ...
- 读书笔记_java设计模式深入研究 第八章 状态模式 State
1,状态模式:事务有n个状态,且维护状态变化. 2,UML模型: -1,上下文环境Context:定义客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete ...
- C++设计模式--状态模式(state)
概述 前面文章介绍了代理模式(在这里),代理模式和状态模式都提供一个代理类,从结构上看,可以认为代理模式只是状态模式的一个特例,不同之处在于,代理模式控制对其实现类的访问,而状态模式动态地改变其实现类 ...
- 设计模式的理解:状态模式(State) 和备忘录模式(Memento)
一.状态模式 状态模式,允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类.它的实现方式和策略模式相似,目的都是对if...else语句进行优化,只不过,策略模式通过外部传入枚举.条 ...
最新文章
- xshell简单命令
- Transformation HDU - 6726(百度之星复赛2019 dfs)
- 计算机硬盘按不同接口,硬盘接口不同 速度差别竟然这么大
- IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
- stl源码剖析_STL源码剖析 阅读笔记(二)allocator
- 谐波分析显著性检验matlab,关于谐波检测方法的MATLAB仿真及综合性能分析.pdf
- Redis学习(6)-常用命令
- 自定义拦截器Interceptor
- ofo运营方还款3574.62万元 你的押金还好吗?
- 服务器系统重置,云服务器系统重置
- PAT 乙级 1039. 到底买不买(20)Java版
- python3 协程_Python3 异步神器-协程(Coroutine)
- js双击事件屏蔽单击事件
- 沟通CTBS物业管理行业远程接入解决方案
- 基于哈夫曼编码的文件压缩
- quartz 整合 postgresql 附带例子
- Dan Pitt卸任ONF执行董事
- ndk 的emac_德州仪器的EMAC外设开发包,配合NDK使用,应在CCS4.2版本以上使用
- linux每个月清理命令,总结linux清理垃圾命令
- controller 之@...
热门文章
- Android 天气预报App的简单实现
- slicer安装_对3D Slicer软件安装离线扩展包
- 【数据异常校验】狄克逊准则(Dixon Criterion)处理异常数据
- Vue学习(十一)Vue CLI脚手架
- 模拟CSDN请求,做一点事
- Steam教育对幼儿启蒙阶段的主观作用
- Wetool已死,私域流量还有可用的社群工具吗?
- scraino编程流程图_Scraino使用手册V2.0
- python爬虫未来发展前景好的行业_爬虫实战2:招聘大数据告诉你运营岗需求现状及职业发展前景...
- 2021年中国表面等离子体共振市场趋势报告、技术动态创新及2027年市场预测