设计模式之状态模式

状态模式

状态模式UML.png
interface TransformersState{
    void skill();//变形金刚不同状态下有不同技能
}

汽车人接口

class CarTransformersState implements TransformersState{
    public void skill(){
        // 汽车状态,技能就是压马路吧
    }
}

变形金刚的汽车型状态

class FightingTransformersState implements TransformersState{
    public void skill(){
        // 战斗状态,技能反正不是压马路,就假设为射击技能吧
    }
}

变形金刚的战斗型状态

class Context{
    TransformersState mTransformersState;
    public void setState(TransformersState mTransformersState){
    this.mTransformersState = mTransformersState;
    }
    public void skill(){
        mTransformersState.skill();
    }
}

用来管理切换状态的类

class Client{
    public static void main(String[] args){
        Context context = new Context();
        context.setState(new FightingTransformersState());//切到战斗模式
        context.skill();//战斗状态下的技能
        context.setState(new CarTransformersState());//切到跑车模式
        context.skill();//跑车状态下的技能
    }
}   

客户端

状态模式的场景一个对象的具体行为取决于这个对象内部的状态,这些状态可以被抽象出来单独为类。这种模式一定程度上会解决if-else多层判断的问题。状态及某种状态的具体实现可以被抽出去成类,层次会比较清晰,不过类会增多

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在日常开发过程中时常需要用到设计模式,但是设计模式有23种,如何将这些设计模式了然于胸并且能在实际开发过程中应用得...
    AntDream阅读 5,458评论 2 3
  • 面向对象编程中,类用来表示对象,一般情况下,我们需要考虑用类来表示什么具体的东西。类对应的东西可能存在于真实世界中...
    六尺帐篷阅读 12,708评论 0 11
  • 状态模式 面向对象编程着力于在对象交互时改变它们的状态。在很多问题中,有限状态机(通常名为状态机)是一个非常方便的...
    英武阅读 10,916评论 0 51
  • 场景引出 假设你有这样一种需求:零售系统中的订单通常有多种状态,包括了从支付、出库、发货、签收等各种状态。而系统则...
    SCQ000阅读 3,790评论 0 50
  • 在开发过程中,我们经常会遇到很多if-else的判断,有的会有很多层,当然也不是说所有的涉及到if-else判断的...
    westLakeChild阅读 3,780评论 0 1