状态模式(State Pattern)

Posted yvhqbat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了状态模式(State Pattern)相关的知识,希望对你有一定的参考价值。

1. 状态模式定义

意图
状态模式: 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

适用性
一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。
一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常, 有多个操作包含这一相同的条件结构。State模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。

类图:

2. 实例

//测试
public class StatePatternTest 
    public static void main(String[] args)
        State state=new State();
        Context context=new Context(state);
        state.setValue("state 1");
        context.method();
        state.setValue("state 2");
        context.method();
        state.setValue("state 3");
        context.method();

    


//状态类
class State
    private String value;
    public String getValue()
        return value;       
    

    public void setValue(String value)
        this.value=value;
    

    public void method1()
        System.out.println("execute the first opt");
    
    public void method2()
        System.out.println("execute the second opt");
    


//根据状态的不同,采用不同的措施
class Context
    private State state=null;
    public Context(State state)
        this.state=state;
    

    public void setState(State state)
        this.state=state;
    
    public State getState()
        return state;
    

    public void method()
        if(state.getValue().equals("state 1"))
            state.method1();
        else if(state.getValue().equals("state 2"))
            state.method2();
        else
            System.out.println("error state");
        
    

运行结果:

execute the first opt
execute the second opt
error state

以上是关于状态模式(State Pattern)的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之- 状态模式(State Pattern)

状态模式(State Pattern)

状态模式(State Pattern)

设计模式实战-状态模式(State Pattern)

设计模式 —— 状态模式(State Pattern)

UE4 设计模式状态模式 State Pattern