美文网首页爱编程,爱生活
Java设计模式<状态机模式>

Java设计模式<状态机模式>

作者: 熬夜的猫头鹰 | 来源:发表于2018-06-16 21:27 被阅读29次

Java设计模式<状态机模式>

意图

  • 允许对象在内部状态发生改变时改变它的行为

解决的问题

  • 对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为

场景

  • 代码中包含大量与对象状态有关的条件语句

如何解决

  • 将各种具体的状态类抽象出来

概述

  • 通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除 if...else 等条件选择语句

封装了转换规则可以自枚举可能的状态,在枚举状态之前需要确定状态种类多重条将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为

  • 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块
  • 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数 扩展性良好

Demo

创建一个接口State.java

public interface State {

    public void doAction(Context context);
}

实现类

public class StartState implements State{
    public void doAction(Context context) {
        System.err.println("i have started the machine");
        context.setState(this);
    }
    public String toString(){
        return "Start State";
    }
}

public class StopState implements State{
    public void doAction(Context context) {
        System.out.println("I have stop the machine");
        context.setState(this);
    }
    public String toString(){
        return "Stop State";
    }
}

DemoMain

public class DemoMain {
    public static void main(String[] args) {
        Context context = new Context();
        StartState startState = new StartState();
        startState.doAction(context);
        System.out.println(context.getState().toString());

        StopState stopState = new StopState();
        stopState.doAction(context);

        System.out.println(context.getState().toString());
    }
}

相关文章

  • Java设计模式<状态机模式>

    Java设计模式<状态机模式> 意图 允许对象在内部状态发生改变时改变它的行为 解决的问题 对象的行为依赖于它的状...

  • Java设计模式<组合模式>

    Java设计模式<组合模式> 意图 对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和...

  • Java设计模式<模板模式>

    Java设计模式<模板模式> 意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改...

  • Java设计模式<命令模式>

    Java设计模式<命令模式> 意图 将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化 使用场景 ...

  • Java设计模式<策略模式>

    Java设计模式<策略模式> 意图 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换 解决的问题 在...

  • Java设计模式<代理模式>

    Java设计模式<代理模式> 意图 限制对象的访问控制 客户端无需知道代理的对象 和装饰模式的共同点 都能对现有的...

  • Java设计模式<过滤模式>

    Java设计模式<过滤模式> 意图 这种模式允许开发人员使用不同的标准来过滤一组对象 场景 在开JDBC开发中经常...

  • Java设计模式<单例模式>

    Java设计模式<单例模式> 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点 优点 在内存里只有一个实...

  • Java设计模式<享元模式>

    Java设计模式<享元模式> 意图 运用共享技术有效地支持大量细粒度的对象 解决问题 在有大量对象时,有可能会造成...

  • Java设计模式<原型模式>

    Java设计模式<原型模式> 意图 原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思...

网友评论

    本文标题:Java设计模式<状态机模式>

    本文链接:https://www.haomeiwen.com/subject/nvzbeftx.html