(二十一)状态模式详解(DOTA版)

               作者:zuoxiaolong8810(左潇龙),转载请注明出处。

               本次LZ给各位介绍状态模式,之前在写设计模式的时候,引入了一些小故事,二十章职责连模式是故事版的最后一篇,之后还剩余四个设计模式,LZ会依照原生的方式去解释这几个设计模式,特别是原型模式和解释器模式,会包含一些其它的内容。

               好了,接下来,我们先来看看状态模式的定义吧。

               定义:(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

               上述是百度百科中对状态模式的定义,定义很简单,只有一句话,请各位形象的去理解这句话,它说当状态改变时,这个对象的行为也会变,而看起来就像是这个类改变了一样。

               这正是应验了我们那句话,有些人一旦发生过什么事以后,就像变了个人似的,这句话其实与状态模式有异曲同工之妙。

               我们仔细体会一下定义当中的要点。

               1、有一个对象,它是有状态的。

               2、这个对象在状态不同的时候,行为不一样。

               3、这些状态是可以切换的,而非毫无关系。

               前两点比较好理解,第3点有时候容易给人比较迷惑的感觉,什么叫这些状态是可以切换的,而非毫无关系?

               举个例子,比如一个人的状态,可以有很多,像生病和健康,这是两个状态,这是有关系并且可以转换的两个状态。再比如,睡觉、上班、休息,这也算是一组状态,这三个状态也是有关系的并且可以互相转换。

               那如果把生病和休息这两个状态放在一起,就显得毫无意义了。所以这些状态应该是一组相关并且可互相切换的状态。

               下面我们来看看状态模式的类图。


                  类图中包含三个角色。

                  Context:它就是那个含有状态的对象,它可以处理一些请求,这些请求最终产生的响应会与状态相关。

                  State:状态接口,它定义了每一个状态的行为集合,这些行为会在Context中得以使用。

                  ConcreteState:具体状态,实现相关行为的具体状态类。

                  如果针对刚才对于人的状态的例子来分析,那么人(Person)就是Context,状态接口依然是状态接口,而具体的状态类,则可以是睡觉,上班,休息,这一系列状态。

                  不过LZ也看过不少状态模式的文章和帖子,包括《大话设计模式》当中&

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值