状态模式之看尽人生百态

简介:         有人说“人的起点起初都是一样的,在后来的加加减减中,慢慢出现了差距……”人生是什么?人生如你脚下的路,如但丁在《神曲》里的一句话“在人生旅程的中途……”不论曾经做对了什么,做错了什么,用一颗心、一生情去坚定走你没走完的路。
        有人说“人的起点起初都是一样的,在后来的加加减减中,慢慢出现了差距……”人生是什么?人生如你脚下的路,如但丁在《神曲》里的一句话“在人生旅程的中途……”不论曾经做对了什么,做错了什么,用一颗心、一生情去坚定走你没走完的路。人生是什么?是一幅优美的画卷,是一段离奇的爱情故事,还是一曲悠悠的伤感乐曲……我无法形容人生是什么,为什么会有各式各样的人生经历,有人哭有人笑,有人淡然,有人超然,细看人间故事,品酸甜苦辣。

        每个人的人生犹如一个个小小的圆圈,随着时间的推移,这个圆慢慢的慢慢的长大,圆里面是一个过程,纷繁复杂着那一段一段的经历。从童年开始,一直到老年落幕,我们都一直在人生的舞台上尽情演绎自己的故事。今天我们的设计模式就从人生开始说起,人生有着五个明确的阶段,从童年,少年,青年,中年,一直到老年落幕,也可以这么说,人的一生分为五个状态,宛如我们设计模式中的状态模式,首先我们来看一下状态模式的结构图:

       

       以我们的人生为例,看看状态模式是如何活跃着我们人生的舞台:

       首先抽象状态类-----抽象类 LifeState

        

    //定义一个抽象的LifeState类  
    public abstract class LifeState  
    {
        public abstract void ChangeLife(Life l);
    }
       具体的人生阶段

       

    //童年阶段-ChildhoodState  
    class ChildhoodState: LifeState
    {  
        public override void ChangeLife(Life l) 
        {  
            Console.WriteLine("童年是一片无边无际的蓝天,包纳了无限的景象!");  
            l.State= new JuvenileState();  
        }  
    }  
    //少年阶段-JuvenileState 
    class JuvenileState :LifeState   
    {  
        public override void ChangeLife(Life l)  
        {  
            Console .WriteLine("少年要用笑脸去追寻梦想,面对梦想,迎接梦想!");
            l.State= new YouthState();
        }  
    }  
    //青年阶段- YouthState 
    class YouthState :LifeState     
    {  
        public override void ChangeLife(Life l)  
        {  
            Console.WriteLine("美丽的豆蔻年华,从青涩走向成熟!");  
            l.State = new MidlifeState ();  
        }  
    }  
    //中年阶段-MidlifeState  
    class MidlifeState :LifeState   
    {  
        public override void  ChangeLife(Life l)  
        {  
            Console.WriteLine("中年的你,是否实现自己的愿望,满意的工作,幸福的家庭!");
            l.State= new ElderyState();  
        }  
    }  

    //老年阶段-ElderyState
    class ElderyState:LifeState 
    {
        public override void ChangeLife(Life l)
        {
 	        Console .WriteLine ("最美不过夕阳红!");
        }
    }
        人生类-----Life

         

    //定义一个人生类-Life  
    public class Life    
    {  
        //初始化当前人生  
        private LifeState state;  
        public Life(LifeState state)  
        {  
            this.state = state;  
        }  
  
        public LifeState State  
        {  
            get { return state; }  
            set { state = value; }  
        }  
  
        public void  ChangeLife() //方法名可以改变  
        {  
            state.ChangeLife(this);  
        }  
    }  
            客户端代码:

             

static void Main(string[] args)
        {
            Life life = new Life( new ChildhoodState());  
            life.ChangeLife();  
            life.ChangeLife();  
            life.ChangeLife();  
            life.ChangeLife(); 
            life.ChangeLife(); 

            Console.Read();
        }
            运行结果如下:

             

        状态模式主要解决的是当控制一个对象状态转化的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化,总的来说就是当一个对象的内在状态改变时允许改变其行为,这个对象看起来是改变了其类。

       在面向对象软件设计时,常常碰到某一个对象由于状态的不同而有不同的行为。如果用if else或是switch case等方法处理,对象操作及对象的状态就耦合在一起,碰到复杂的情况就会造成代码结构的混乱。在这种情况下,就可以使用状态模式来解决问题。

目录
相关文章
|
16天前
|
设计模式 算法
状态模式和策略模式有什么区别
状态模式和策略模式有什么区别
12 1
|
4月前
行为型 状态模式
行为型 状态模式
17 0
|
4月前
|
前端开发
状态模式
状态模式
27 0
状态模式的总结
状态模式的总结
|
10月前
|
设计模式 JavaScript
关于状态模式我所知道的
关于状态模式我所知道的
47 0
|
设计模式 Java
Java设计模式 ->状态模式
Java设计模式 ->状态模式
68 0
|
设计模式 算法 Java
状态模式和策略模式的区别与联系
UML 状态模式是策略模式的孪生兄弟,是因为它们的UML图是一样的。但意图却完全不一样,策略模式是让用户指定更换的策略算法,而状态模式是状态在满足一定条件下的自动更换,用户无法指定状态,最多只能设置初始状态。
|
设计模式
我学会了,状态模式
状态模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
86 0
我学会了,状态模式
|
uml
状态模式与备忘录模式(1)
状态模式与备忘录模式(1)
75 0
状态模式与备忘录模式(1)
|
存储 程序员 开发工具
状态模式与备忘录模式(2)
状态模式与备忘录模式(2)
119 0
状态模式与备忘录模式(2)