状态模式之看尽人生百态

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

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

       

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

       首先抽象状态类-----抽象类 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等方法处理,对象操作及对象的状态就耦合在一起,碰到复杂的情况就会造成代码结构的混乱。在这种情况下,就可以使用状态模式来解决问题。

目录
相关文章
|
5月前
|
测试技术 数据安全/隐私保护 Python
刷视频脚本,抖音快手小红书,自动看广告刷视频【python】
这个代码示例展示了如何使用Selenium和PyAutoGUI模拟视频观看行为,包括登录、观看视频
|
9月前
|
Web App开发 前端开发 数据可视化
20K star!让网页设计秒变手绘风,这个开源库太有创意了!
嗨,大家好,我是小华同学。Rough.js 是一个仅8KB的轻量级图形库,能为网页元素赋予自然的手绘质感,支持手绘风格渲染、全类型图形和跨平台兼容。它适合数据可视化、教育课件、原型设计等场景,具有设计友好、性能卓越、扩展性强等优势。
372 12
|
9月前
|
5G 网络架构 UED
网速只拼Mbps?解码网速真相的五大关键因素
Mbps(兆比特每秒)是衡量数据传输速度的单位,表示每秒传输的百万比特数。它是评估网络性能的核心指标,广泛应用于家用宽带、移动网络和企业级网络中。Mbps 数值越高,理论上数据传输越快,但实际体验还受网络拥塞、丢包率和信号强度等因素影响。例如,在网络高峰时段或信号较弱的地方,即使Mbps数值高,也可能出现卡顿。5G和光纤技术显著提升了Mbps速率,但仍需考虑硬件设备如路由器和网卡的性能瓶颈。理解Mbps及其影响因素,有助于用户选择合适的网络服务并优化网络体验。
988 1
|
9月前
|
弹性计算 人工智能 运维
阿里云操作系统控制台实战评测:提升云资源管理与监控效率
阿里云操作系统控制台是一款集成了可视化管理、问题分析和智能助手等功能的运维工具,适用于企业和个人用户。它通过统一界面监控和优化系统运行,结合AI与自动化技术,提升操作系统的使用效率和稳定性。用户无需专业运维知识即可完成系统维护和故障诊断。主要功能包括进程热度追踪、系统诊断等,提供直观的数据展示和详细的分析报告,帮助用户快速定位并解决问题。建议进一步完善操作文档和优化数据可视化效果,以提升用户体验。
236 0
|
监控 API 开发者
深入理解微服务架构:设计与实施
【10月更文挑战第7天】深入理解微服务架构:设计与实施
283 0
|
监控 安全 算法
悬垂引用与临时对象在C++中的深入探讨: 风险、原因与预防策略
悬垂引用与临时对象在C++中的深入探讨: 风险、原因与预防策略
428 3
|
Ubuntu 数据安全/隐私保护
蓝易云 - ubuntu设置系统代理
以上就是在Ubuntu系统中设置系统代理的步骤,希望对你有所帮助。
526 0
|
移动开发 监控 Android开发
几个系统级崩溃问题和h5加载页面崩溃问题及解决方案
几个系统级崩溃问题和h5加载页面崩溃问题及解决方案
354 0
|
编译器 C语言 图形学
SCADA系统基于IEC 61131-3标准的编程软件
SCADA系统基于IEC 61131-3标准的编程软件
|
存储 自然语言处理 监控
增强分析白皮书——洞察展现篇
增强分析白皮书——洞察展现篇
1000 1