读书笔记13:状态模式
2011-12-06 22:10
267 查看
1、概念
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。主要解决,当一个对象状态转换的条件表达式过于复杂时把状态的判断逻辑转移到表示不同状态的一系列类当中。将复杂的逻辑判断简化。
2、模型
有三个角色,
State——抽象状态类,封装一个与特定状态相关的行为。
CreateState——具体状态,实现一个特定状态的行为。
ConText——维护一个CreateState实例,该实例是根据状态传入的。
程序实现:
下面以一个项目中的小例子看一下状态模式的应用。需求:根据每天不同的时间切换软件的皮肤颜色,以模型表示。
颜色抽象状态类:
分别显示:早中晚的颜色。
本文出自 “西北白杨树” 博客,请务必保留此出处http://yangyoushan.blog.51cto.com/7229571/1276605
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。主要解决,当一个对象状态转换的条件表达式过于复杂时把状态的判断逻辑转移到表示不同状态的一系列类当中。将复杂的逻辑判断简化。
2、模型
有三个角色,
State——抽象状态类,封装一个与特定状态相关的行为。
CreateState——具体状态,实现一个特定状态的行为。
ConText——维护一个CreateState实例,该实例是根据状态传入的。
程序实现:
public abstract class State { public abstract void Behavior(ConText conText); } public class CreateStateFirst:State { public override Behavior(ConText conText) { conText.state = new CreateStateSecond(); } } public class CreateStateSecond:State { public override Behavior(ConText conText) { conText.state = new CreateStateFirst(); } } public class ConText { private State state; public ConText(State diffrentState) { state=diffrentState; } public State CurretState { set{state=value;} get{return state;} } public void DealWith() { state.Behavior(this); } } static void Main(String[] args) { Context conText = new ConText(new CreateStateFirst()); conText.DealWith(); }这样将各个状态对应的行为分开来(CreateStateFirst,CreateStateSecond),它们由ConText负责维护。
下面以一个项目中的小例子看一下状态模式的应用。需求:根据每天不同的时间切换软件的皮肤颜色,以模型表示。
颜色抽象状态类:
public abstract class ColorState { public abstract void ShowColorSkinFile(SoftWare softWare); }
public class MorningColor:ColorState { public override ShowColorSkinFile(SoftWare msoftWare) { if(msoftWare.time<12) { ConSole.writeLine("早晨的软件皮肤"); } else { msoftWare.SetColorState(new AfterNoonColor()); } } }
public class AfterNoonColor:ColorState { public override ShowColorSkinFile(SoftWare msoftWare) { if(msoftWare.time<18) { ConSole.writeLine("下午的软件皮肤"); } else { msoftWare.SetColorState(new EveningNoonColor()); } } }
public class EveningNoonColor:ColorState { public override ShowColorSkinFile(SoftWare msoftWare) { if(msoftWare.time<24) { ConSole.writeLine("晚上的软件皮肤"); } else { msoftWare.SetColorState(new MorningColor()); } } }
public class SoftWare { private ColorState state; public SoftWare() { state=new CommonColor(); } public int Time { set; get; } public void SetColorState(ColorState cState) { state=cState; } public void Show() { state.ShowColorSkinFile(this); } }
static void Main(String[] args) { SoftWare softe = new SoftWare(); softe.Time =8; softe.Show(); softe.Time =14; softe.Show(); softe.Time =20; softe.Show(); }
分别显示:早中晚的颜色。
本文出自 “西北白杨树” 博客,请务必保留此出处http://yangyoushan.blog.51cto.com/7229571/1276605
相关文章推荐
- 读书笔记13:状态模式
- 读书笔记13:状态模式
- 《Android源码设计模式解析与实战》读书笔记(八)——状态模式
- 《Head First设计模式》 读书笔记13 复合模式 MVC模式
- 【读书笔记】状态模式C++代码第二版
- 设计模式读书笔记-----状态模式
- 设计模式读书笔记-----状态模式
- HeadFirst设计模式_读书笔记_010_状态模式
- 读书笔记_java设计模式深入研究 第八章 状态模式 State
- 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(13)--- 线程安全接口和双检查加锁优化
- 《Head First Design Patterns》读书笔记之状态模式
- 设计模式读书笔记-状态模式
- 第十六章 无尽加班何时休--状态模式(读书笔记)
- 《Head First设计模式》 读书笔记11 状态模式 The State Pattern
- 《设计模式之禅》读书笔记--(13)策略模式
- 【设计模式】《Head First 设计模式》读书笔记——状态模式
- 《游戏编程模式》读书笔记之二 - 状态模式
- 设计模式读书笔记之状态模式(State Pattern)
- 《设计模式之禅》读书笔记--(21)状态模式