状态模式
来源:互联网 发布:python 语音实时采集 编辑:程序博客网 时间:2024/06/01 07:15
感慨:
有时候生活中总会遇到这样的尴尬状况:话说着说着,突然就不理人了!感同身受一下,遇到这样的情况真的是心里很不好受啊!尽管他是无意的,可是结果已经成这样的,到最后肯定是矛盾一场啊!不过天最终还是会晴的,不就之后就会发现刚才吵架的两个人又有说有笑了!总结一句话:人呐!真是善变的动物!
人的生活不就是四种表情状态吗?喜怒哀乐!阴晴不定!用个图来形容一下:
结构图:
实现的相关代码:
客户端:
static void Main(string[] args) { Person person = new Person(new JoyfulState()); person.ChangeState(); //四种心情循环一下 person.ChangeState(); person.ChangeState(); person.ChangeState(); }
抽象状态类://ExpressionState抽象状态类 ,定义一个接口以封装与Person的一个特定状态相关的行为。 abstract class ExpressionState { public abstract void Feel(Person p); } //具体表情类 class JoyfulState:ExpressionState { public override void Feel(Person p) { p.espressionstate = new AngryState(); Console.WriteLine("此刻心情很愉快!"); } }
具体状态1 class AngryState:ExpressionState { public override void Feel(Person p) { p.espressionstate = new SorrowState(); //心情生气之后,转入悲哀状态 Console.WriteLine("此刻心情很生气!"); } }
具体的Person实例类 public ExpressionState espressionstate { get { return expressionstate ; } set { expressionstate = value; } } public Person (ExpressionState expressionstate) //定义Person的初始状态 { this.expressionstate = expressionstate ; } public void ChangeState() //心情转换 { expressionstate.Feel(this); }
实现状态: 其实心情真的是受各种因素影响的,如天气,今天的环境氛围等等!自己就很不喜欢阴天,那样心情也会随着其变换而变换……
还是尽量保持愉快的心情吧!在自己 不同的心情下做同一件事情,猜测一下,会产生怎样不同的结果呢?
与孪生兄弟“策略模式”的比较:
策略模式
状态模式属于行为型模式。其定义是当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
之所以与策略模式自称孪生兄弟,是因为两者的结构图一样,实则各有各的想法,各有各的意愿。
在建模的过程中,策略模式是让用户指定更换的算法,而状态模式是状态在满足一定的状态下的自动更换,用户无法指定状态,最多只能设置初始状态;我们在编写代码的时候,遇到一系列的条件判断的时候,可能会采用策略模式来优化结构,因为这时候涉及到策略的选择,但有时候仔细就会发现,这些所谓的策略其实是对象的不同状态更加明显的是,对象的某种状态也成为判断的条件;在状态模式中,状态的变迁是由对象的内部条件决定,外界只需关心其接口,不必关心其状态对象的创建和转化,而策略模式里,采用何种模式由外部条件决定。
总结与分析:
好处:
将与特定状态相关的行为局部化,并且将不同状态的行为分割开来,说白了,就是为了消除庞大的条件分支语句,状态模式是将各种状态转移逻辑分布到State的子类之间,来减少相互间的依赖。
使用情况:当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用此模式了!
6 0
- 状态模式(状态变化)
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 杭电OJ 1026:Ignatius and the Princess I
- 黑马程序员_IOS课程申请
- java基础06
- iOS中实现打电话、发短信
- 清理哲学上的垃圾、雾霾——评陈定学先生的《<矛盾论>的四大缺陷》等文
- 状态模式
- View处理事件
- R语言学习笔记——R语言数据处理基本操作
- js 学习笔记
- HTTP协议摘要
- MEPG2 初探(PSI,SI的解析)
- Eclipse(4.2) maven(3.0.4--m2e) integrate with tomcat 7 (win7)
- eclipse4.3 解决没有check out as maven project
- 各类排序方法小结