现在有个糖果控制器,它的运行状态图如下:
我们要用java来实现这个糖果控制器。首先需要用一些实例变量来表示不同的状态:
我们的思路是创建一个糖果控制器类,它就像一个状态机,每个可能的操作都创建一个方法,在这些方法内部对当前状态进行判断,并做出相应的反应。
由于这并不难理解,所以直接上代码(有点长):
...
分类:
其他好文 时间:
2015-05-24 14:20:55
阅读次数:
173
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 状态模式{ public interface State { void doSomething(Person p);...
1979年在湖北出土的曾侯乙编钟,每一只钟都能发出不同的音。
用面向对象的语言来讲,编钟有能够动态变化的属性,也就是它所能发出的声音。编钟的这种属性叫做状态,而编钟被叫做有状态的对象。编钟所能发出的声音是由敲击的那一只钟决定,而钟的数目个每一只钟的状态是事先确定的。
很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的对象。
状态模式的类图如下:...
分类:
编程语言 时间:
2015-05-20 09:55:18
阅读次数:
160
过去参与的一个微信公众号开发的项目,其中处理被动响应消息的类相对臃肿,原因是该项目需要处理的消息类型较多,通过switch分支,分支方法都写在一个类里面。功能完成后,这个类就巨大无比了。闲来无事,就在想应该怎么重构一下呢?设计模式里面有解决大量if分支的状态模式,但是模式应用还没看明白。
想来,还是switch最直观的,为了便于维护,有必要把每个分支都抽取成一个处理类,同时做好包结构...
分类:
微信 时间:
2015-05-18 11:00:47
阅读次数:
428
最近花了几天时间梳理了一下新游戏的客户端框架,虽然本身就有相对明确的方向,但是在一开始写的时候还是有些混乱,不过最终梳理完成后,个人感觉代码清爽很多。
这篇文章不是设计模式的教学,而是自己的一些想法和实践,我把代码梳理成自己喜欢的结构,保证逻辑和结构的清晰,但是这并不意味者它是符合所有人习惯的。
我之前有写过一两篇文章讨论客户端的结构,也吐槽过一些其他人的设计。...
分类:
编程语言 时间:
2015-05-17 20:20:32
阅读次数:
873
工作状态示例: 1.State: public abstract class State { public abstract void WriteProgram(Work work); }2.ConcreteState(以ForenoonState、NoonSt...
分类:
其他好文 时间:
2015-05-17 00:41:14
阅读次数:
161
状态模式(State)-行为型在职责链模式中,将条件语句改成多个职责类进行处理,如果不是自己处理,则自动转到下一个职责类,如果在转给下一个职责类进行处理前,需要修改当前的状态,此时就需要用到状态模式。
引例:电梯的运行过程,各种状态切换。实现原理图
状态模式实现原理图状态模式就是根据对象的状态不同,作出不同的行为。状态模式使代码中复杂而庸常的逻辑判断语句问题得到了解决,而且具体状态角色将具体状态...
分类:
其他好文 时间:
2015-05-16 14:54:39
阅读次数:
254
场景:
电梯的运行
维修、正常、自动关门、自动开门、向上运行、向下运行、消防状态
红绿灯
红灯、黄灯、绿灯
企业或政府系统
公文的审批状态
报销单据审批状态
假条审批
网上购物时,订单的状态
下单已付款已发货送货中已收货
核心
用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题
结构
Context环境类
环境类中...
分类:
编程语言 时间:
2015-05-15 22:52:34
阅读次数:
220
在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。 状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。状态模式.....
分类:
编程语言 时间:
2015-05-13 19:13:27
阅读次数:
198
状态模式(state):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态转换的条件表达式国语复杂时的情况。把状态的判断逻辑转移到不同状态的一系列类中,可以把复杂的判断逻辑简化。...
分类:
编程语言 时间:
2015-05-13 13:03:37
阅读次数:
124