状态模式

来源:互联网 发布: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
原创粉丝点击