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

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());
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,516评论 18 399
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 9,391评论 1 15
  • 参考资料:菜鸟教程之设计模式 设计模式概述 设计模式(Design pattern)代表了最佳的实践,通常被有经验...
    Steven1997阅读 4,930评论 1 12
  • 看图 四种类型 ClusterIP 使用集群内的私有ip —— 这是默认值。 NodePort 除了使用clust...
    go4it阅读 7,995评论 0 2
  • 正所谓:天下没有不散的宴席。有聚就有散,世界上根本就没有永久的相聚。我们的相聚就是上天注定的缘分,但是缘分尽了就会...
    闫松松阅读 4,781评论 0 0

友情链接更多精彩内容