什么是状态模式程序员
所谓状态模式,就是当一个对象的内在转台改变时容许改变其行为,这个对象看起来就像是改变了其类的设计模式。状态模式和策略模式都是为具备多种可能情形设计的模式,二者的结构几乎彻底同样,但状态模式的行为是平行且不可替换的,而策略模式的行为则是彼此独立的。换句话说就是:状态模式将各个状态所对应的操做分离开来,即对于不一样的状态,由不一样的子类实现具体操做;而策略模式是直接依赖参数进行选择策略,不存在切换状态的操做。设计模式
状态模式的实现方式ide
古典名著《×××缘》第二十五回讲述了唐敖和多九公等人乘船在海外游历两面国的故事,两面国的居民天生两幅面孔(状态),他们对人的态度(行为)就是典型的状态模式。首先定义一个行为接口:性能
public interface IState { |
笑脸状态:spa
public class GoodFace implements IState { |
凶脸状态:orm
public class BadFace implements IState { |
两面国的人天生是演员:blog
public class Actor { |
见到唐敖和多九公以后:
Actor actor = new Actor(); |
静态的文字视觉冲击力不够,读者能够自觉百度“两面国 木偶剧”,保证你对状态模式印象深入。
Android源码中的状态模式
(1)WifiSetting
就像Android系统自带拍照、裁剪、相册等系统Activity同样,WifiSetting是一个系统Fragment,用来展现控制Wifi链接的UI。Wifi的开启中、已开启、关闭中、已关闭就是一个典型的状态模式。
Android开发中如何利用状态模式
(1)当一个对象的行为取决于它的状态,而且它必须在运行时根据状态改变它的行为的时候适合使用状态模式。所以从事loT开发的Android程序员应该常常用到状态模式(loT设备的开机关机、播放暂停、BLE的链接断开等)。
(2)当前任遗留代码中包含大量不易维护的多分支语句(if-else或switch-case)语句,而且这些分支都与对象状态有关而且依赖对象状态时。此时能够用状态模式进行重构。
须要注意的几个问题
(1)状态模式的使用势必会大大增长类和对象的数量,比策略模式还大,是典型的用性能和效率换开发进度的设计模式之一。
本系列其余博客
【设计模式与Android】备忘录模式——在齐太史简