状态模式与外观模式的碰撞

一、举例体验

炎热的季节又来到了,收拾橱子整理衣服,发现冬天的大棉服还没有收拾,到底是手洗呢?还是送到洗衣店呢?真的是愁啊?愁?

送到洗衣店不用自己动手,只要交上Money就一切解决,是方便了,可是心疼那些钱啊,偷懒的同时心情也不是很好;不送到洗衣店,自己动手来解决,心情也不是很好,因为还得自己动手啊!面对那么厚的衣服,不洗都感觉很累啊!突然间想到自己在家悠闲的日子了,因为又不用花钱,也不用自己动手啊!心情当然高兴了!(一切老妈来搞定)。

这段小故事不就体现了两个设计模式吗?把衣服送到洗衣店,不用自己来面对那些棉服,洗衣液等等,很是方便。这就是设计模式中所谓的状态模式;花钱了,心情很不舒服;花开的日子到了,出门踏青让自己的心情得到了放松,某天因为一件小事而伤心了……心情的转变不就是一个状态模式吗?

二、结构图理解

来看看结构图,理解一下:

外观模式的结构图:


(Facade):外观类,知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象

(SubSystem):子系统类集合,实现子系统的功能,处理Facade对象指派的任务。注意子类中没有Facade的任何信息,即没有对Facade对象的引用。

状态模式的结构图:


(Context):维护一个ConcreteState子类的实例,这个实例定义当前的状态

(ConcreteState):具体状态,每一个子类实现一个与Context的一个状态相关的行为

首先从类图关系的角度分析:外观模式中,子系统类和外观类之间是关联关系;状态模式中,子类与抽象状态类之间是泛化关系,即所谓的继承关系,如上文举例当中,各种心情的变化,最终还是归属于状态。

三、模式区分:

外观模式是一种结构型模式;就上述例子而言,通过洗衣店把自己这个类和衣服这个类分离开来了,解决了类与类之间的依赖关系,外观模式通过把他们的关系放在一个Facade中,降低了类类之间的耦合度。重要作用就是起到了解耦的作用。

状态模式是一种行为型模式;将特定的状态相关的行为放入一个对象中,如上例,各种心情的状态都可以存放在ConcreteState中,即定义新的子类可以很容易地增加新的状态和转换

四、Code

外观模式保存了各个子系统对象,然后根据实际逻辑组合;状态模式是允许一个对象在其内部对象改变时改变它的行为,对象看起来似乎修改了它的类。

其实各种模式都得满足于面向对象设计的最终目的,满足于六大原则。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值