Chapter 10 The State of Things——the State Pattern

总述

The State Pattern通过改变对象内部的状态来帮助对象控制它们的行为。
The State Pattern适用于同一个东西从一种状态到另一种状态的转换,它涉及到引起这种状态转换的因子。

如何把这些状态转换为代码?

1、整理这些状态。
2、创建一个实例,并定义表示各状态的数字。
3、整理出所有的事件,每一个事件都是一个接口,你通过实现它们来驱动状态的转换。
4、写这么一个类,代表一台机器,对于每个动作我们写一个方法,每个方法都去检查状态字,针对输入的状态给出相应的反应。
以上其实是在对象内部建立状态模型的过程。
状态模式在两个状态之间把当前的状态呈现出来,以指示下一个状态的进行。这看上去是一种交互,我感觉跟做手机APP差不多。
果然不出我所料,这些代码堆在一起修改的成本太高,肯定要改。

The new design

1、定义一个状态接口,里面包含了一个方法,这个方法对于所有的转换动作都是适用的,即,普遍适用。
2、为每个状态定义一个类,当机器处于转换状态时该类能够完成转换行为。
3、摆脱所有条件代码,委托状态类为我们工作。

为什么这么设计?

这样做的好处就是可以把可变行为和不可变行为分别集中化,然后处理。
我们需要指定每个状态类的具体行为。
新的设计用实现了state接口的4个不同的状态对象来表示4个不同的状态,每个不同对象的类的构造函数完成了不同状态之间的转换。

if语句有啥坏处?

if语句块是非常难以维护的。
严格封装每个状态类,使之不被更动,转而让呈现各种状态的主体通过添加状态对象的方法来改变自身的状态。
提供了类和代码的结构定式,这种结构很合适,也容易理解和阅读。
当一个动作发生的时候,它是交给某一个状态对象来处理的。

The State Pattern defined

该模式允许对象内部状态改变的时候改变自身的行为,这个对象似乎要改变它的类。
P448展示了这种模式的类图设计。

the State Pattern与the Strategy Pattern的区别

对于前者而言改变是发生在对象内部,对于用户而言是透明的。
后者所需要复合的对象是由用户指定的。
策略模式是在某种行为的基础上添加别的行为来改变行为,它一般是通过改变子类实现的。
状态模式是通过把不同状态的对象封装进主体,该主体会根据不同的条件来改变自身的行为。
状态模式中的各种状态对象是可以共享的,方法是通过一个static的状态对象来实现。
使用状态模式会导致在你的设计里面出现很多的类。
表示状态的类可以被多个主体类共享。
主体类和状态类都可以控制状态转换。

状态模式的实现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,828评论 19 139
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 9,390评论 1 15
  • UIBezierPath Class Reference 译:UIBezierPath类封装了Core Graph...
    鋼鉄侠阅读 5,828评论 0 3
  • 做最想做的事,对大部分的中国人并不容易,一句话,活的太压抑!如果你想做一件事,只是想做做就好,还是算了,一天一天过...
    勇敢面对007阅读 1,162评论 3 0
  • 1、苹果:苹果富含纤维物质,可补充人体足够的纤维素,降低心脏病发病率,还可以减肥。许多美国人把苹果作为瘦身必备食品...
    乐在释怀阅读 3,222评论 0 0

友情链接更多精彩内容