状态模式
来源:互联网 发布:程序员表白代码 编辑:程序博客网 时间:2024/05/18 10:54
MartinFlower曾在《重构》中写到:一个很重要的代码坏味道叫做Long method,代码过长说明责任过大,很糟糕。
面向对象设计其实就是希望做到代码的责任分解。
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式。
class Program { static void Main(string[] args) { Context c = new Context(new ConcreteStateA()); c.Request(); c.Request(); c.Request(); c.Request(); Console.Read(); } } class Context { private State state; public Context(State state) { this.state = state; } public State State { get { return state; } set { state = value; Console.WriteLine("当前状态:" + state.GetType().Name); } } public void Request() { state.Handle(this); } } abstract class State { public abstract void Handle(Context context); } class ConcreteStateA : State { public override void Handle(Context context) { context.State = new ConcreteStateB(); } } class ConcreteStateB : State { public override void Handle(Context context) { context.State = new ConcreteStateA(); } }
0 0
- 状态模式(状态变化)
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 关于异常
- html5第八课时,变形效果
- 1230 元素查找
- Android科普知识之recyclerView与标题栏的滑动变色
- html5第八课时,图片放大溢出解决
- 状态模式
- linux终端
- :before 和 :after的多用途实践 — 基础篇
- html5第八课时,移动的飞机
- 好网站推荐
- springmvc里的转发和重定向
- html5第八课时,灵活布局,flex
- Win10 64位系统设置JAVA环境
- html5第八课时,flex的基础应用