189 8069 5689

【设计模式与Android】状态模式——一个人的两幅面孔-创新互联

什么是状态模式

创新互联建站专注于企业网络营销推广、网站重做改版、伊美网站定制设计、自适应品牌网站建设、H5建站成都做商城网站、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为伊美等各大城市提供网站开发制作服务。

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

状态模式的实现方式

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

public interfaceIState {

    voidface();

    voidword();

}

笑脸状态:

public classGoodFace implementsIState {
    @Override
    public voidface() {
        Log.e("表情","和颜悦色、满面谦恭");
    }

    @Override
    public voidword() {
        Log.e("语言","嘤嘤嘤");
    }
}

凶脸状态:

public classBadFace implementsIState {
    @Override
    public voidface() {
        Log.e("表情","鼠眼鹰鼻,满面横肉");
    }

    @Override
    public voidword() {
        Log.e("语言","你(N)忙(M)吧(B),我(W)吃(C)柠(N)檬(M)");
    }
}

两面国的人天生是演员:

public classActor {

    privateIState iState;

    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】责任链模式——曹瞒兵败走华容

【设计模式与Android】命令模式——军令如山

【设计模式与Android】观察者模式——千里眼与顺风耳

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

【设计模式与Android】迭代器模式——容器遍历,细节隐藏


另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


标题名称:【设计模式与Android】状态模式——一个人的两幅面孔-创新互联
URL标题:http://cdxtjz.cn/article/ccsddp.html

其他资讯