android设计模式代码实现的,【设计模式与Android】状态模式——一个人的两幅面孔...

什么是状态模式

所谓状态模式,就是当一个对象的内在转台改变时允许改变其行为,这个对象看起来就像是改变了其类的设计模式。状态模式和策略模式都是为具有多种可能情形设计的模式,两者的结构几乎完全一样,但状态模式的行为是平行且不可替换的,而策略模式的行为则是彼此独立的。换句话说就是:状态模式将各个状态所对应的操作分离开来,即对于不同的状态,由不同的子类实现具体操作;而策略模式是直接依赖参数进行选择策略,不存在切换状态的操作。

状态模式的实现方式

古典名著《×××缘》第二十五回讲述了唐敖和多九公等人乘船在海外游历两面国的故事,两面国的居民天生两幅面孔(状态),他们对人的态度(行为)就是典型的状态模式。首先定义一个行为接口:public interfaceIState {voidface();voidword();}

笑脸状态:public classGoodFaceimplementsIState {@Overridepublic voidface() {Log.e("表情","和颜悦色、满面谦恭");}@Overridepublic voidword() {Log.e("语言","嘤嘤嘤");}}

凶脸状态:public classBadFaceimplementsIState {@Overridepublic voidface() {Log.e("表情","鼠眼鹰鼻,满面横肉");}@Overridepublic voidword() {Log.e("语言","你(N)忙(M)吧(B),我(W)吃(C)柠(N)檬(M)");}}

两面国的人天生是演员:public classActor {privateIStateiState;private voidsetState(IState iState) {this.iState= iState;}public voidmeetPoorPerson(){Log.e("为啥变脸","见到穷人了");setState(newBadFace());}public voidmeetRichPerson(){Log.e("为啥变脸","见到有钱人了");setState(newGoodFace());}public voidface(){iState.face();}public voidword(){iState.word();}}

见到唐敖和多九公之后:Actor actor =newActor();Log.e("唐敖","穿着绸衫");actor.meetRichPerson();actor.face();actor.word();Log.e("多九公","穿着布衫");actor.meetPoorPerson();actor.face();actor.word();

静态的文字视觉冲击力不够,读者可以自觉百度“两面国 木偶剧”,保证你对状态模式印象深刻。

Android源码中的状态模式

(1)WifiSetting

就像Android系统自带拍照、裁剪、相册等系统Activity一样,WifiSetting是一个系统Fragment,用来展示控制Wifi连接的UI。Wifi的开启中、已开启、关闭中、已关闭就是一个典型的状态模式。

Android开发中如何利用状态模式

(1)当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为的时候适合使用状态模式。因此从事loT开发的Android程序员应该经常用到状态模式(loT设备的开机关机、播放暂停、BLE的连接断开等)。

(2)当前任遗留代码中包含大量不易维护的多分支语句(if-else或switch-case)语句,并且这些分支都与对象状态有关并且依赖对象状态时。此时可以用状态模式进行重构。

需要注意的几个问题

(1)状态模式的使用势必会大大增加类和对象的数量,比策略模式还大,是典型的用性能和效率换开发进度的设计模式之一。

本系列其他博客

【设计模式与Android】备忘录模式——在齐太史简

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值