博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之状态模式(行为型)
阅读量:2040 次
发布时间:2019-04-28

本文共 1493 字,大约阅读时间需要 4 分钟。

模式定义

一个对象在其内部状态改变时改变其行为,这个对象我们可以称为状态对象,所以状态模式是一种对象行为型模式。

模式结构

  • Context:环境类

    Context类也可以称之为上下文类,实际上就是拥有状态的对象,可以理解为状态管理器。

  • State:抽象状态类

    抽象状态类可以是一个接口类或者抽象类,反正实现的话都是通过具体状态类。抽象状态类,封装环境类不同状态下的所有动作方法。

  • ConcreteState:具体状态类

    具体实现类就比较容易理解了,就是继承抽象状态类,实现具体的方法,不一定所有的抽象方法都有重写,根据环境类状态的改变进行重写就好,其实也是根据状态改变改变动作方法。

模式适用场景

  • 状态模式适用于行为随状态改变的业务场景,比如状态改变了,行为也会做成改变。
  • 业务代码中很多条件的情况,加入一些代码有很多的if…else,并且经常改变,这种情况就可以使用状态模式进行编写。

业务应用场景:

  • 比如OA的审批就可以应用状态模式,发起申请之后,审批状态可能有受理,批准等等状态,每个状态具有不一样的动作;

  • 游戏的角色扮演,每次游戏版本升级都是会出现状态动作的改变,用状态模式进行设计,可以提高程序可拓展性;

简单实例

上下文类:

public class Context {   private State state;    public Context(){      state = null;   }    public void setState(State state){      this.state = state;        }    public State getState(){      return state;   }}

抽象状态类:

public abstract class State {   public void doAction(Context context);}

具体状态类:

public class ConcreteState implements State {    public void doAction(Context context) {      System.out.println("Player is in start state");      context.setState(this);    }    public String toString(){      return "Start State";   }}

调用代码:

public class StatePatternDemo {   public static void main(String[] args) {      Context context = new Context();       ConcreteState concreteState = new ConcreteState();      concreteState.doAction(context);       System.out.println(context.getState().toString());    }}

状态模式分类

状态模式分为简单状态模式和可切换状态模式。

  • 简单状态模式

    简单状态模式就是指状态相对独立,具体状态类可以根据抽象状态类进行编程,也就是不需要用环境类中的setState方法改变状态

  • 可切换状态的状态模式

    可切换状态模式是状态可以变换的,状态变换了,具体状态类在调用时就要使用环境类的setState改变状态

转载地址:http://bycof.baihongyu.com/

你可能感兴趣的文章
结构型模式之组合模式(Composite)
查看>>
结构型模式之装饰(Decorator)
查看>>
结构型模式之外观模式(Facade)
查看>>
结构型模式之享元模式(FlyWeight)
查看>>
结构型模式之代理模式(Proxy)
查看>>
行为型模式之职责链模式(Chain of responsibility)
查看>>
行为型模式之命令模式(command)
查看>>
行为型模式之解释器模式(Interpreter)
查看>>
行为型模式之迭代器模式(Iterator)
查看>>
行为型模式之中介者模式(Mediator)
查看>>
行为型模式之备忘录模式(Memento)
查看>>
行为型模式之观察者模式(Observer)
查看>>
行为型模式之状态模式(State)
查看>>
行为型模式之策略模式(Strategy)
查看>>
行为型模式之模板方法模式(TemplateMethod)
查看>>
行为型模式之访问者模式(Visitor)
查看>>
大小端详解
查看>>
source insight使用方法简介
查看>>
<stdarg.h>头文件的使用
查看>>
C++/C 宏定义(define)中# ## 的含义 宏拼接
查看>>