转载:http://www.verydemo.com/demo_c92_i259801.html
对象状态影响对象行为
对象拥有不同的状态,往往会行使不同的行为……
在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?
允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。
——《设计模式》GoF
假如文档的状态要添加一个新的“打印”状态,那么就需要更改枚举类型和Document类的Handle函数。这样既违背了依赖倒置原则,也违背了开放封闭原则。
改进的代码
主逻辑每处理完一个Handle方法时,就会由状态自身设置下一个状态,这样状态的流转就不由主逻辑自身来管理,而是由每个状态自身决定,由状态自身决定自己的后继者是谁。这样状态的流转和行为都不再和主逻辑紧耦合了,只有运行时依赖的关系,而没有编译时依赖。
State模式将都放入一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维持State的接口,这样实现了具体操作与状态转换之间的解耦。为不同的状态引入不同的对象
相关推荐
C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式 C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式 C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式 C#面向对象设计...
C#面向对象设计模式纵横谈(25):设计模式总结
C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) (Level 300)
C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式
C#面向对象设计模式纵横谈 第二课 Singleton 单件(创建型模式)
C#面向对象设计模式纵横谈(1):面向对象设计模式与原则 体验课程全面解说
C#面向对象设计模式纵横谈 12种设计模式 一本不可多得的详解设计模式书籍。
C#面向对象设计模式纵横谈全套视频,以及源码。 视频是李建忠前辈的录制的视频。
C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)
C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式)
《C#面向对象设计模式纵横谈》是由MSDN提供的webcast系列教程之一。MSDN特邀教师李建忠倾心打造。 这个系列的教程虽然是用C#语言描述的,但是对于使用其他面向对象对象语言的程序员来说也有很强的指导意义。毕竟教程...
WEBCASTC#面向对象设计模式纵横谈系列课程打包下载
WEBCASTC#面向对象设计模式纵横谈系列课程打包下载
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要资源分。敬请期待。 这是第18节:行为型...
C#面向对象设计模式纵横谈-创建型模式
6):Prototype 原型模式(创建型模式)\C#面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模式).pdf
C#面向对象设计模式纵横谈系列课程1, C#面向对象设计模式纵横谈系列课程1, C#面向对象设计模式纵横谈系列课程1;
C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式).