美文网首页23种设计模式-java
State pattern-状态模式

State pattern-状态模式

作者: oneWeekOneTopic | 来源:发表于2018-06-08 10:39 被阅读10次

解决问题

主要解决由于状态不同而导致对象行为发生复杂变化(特别是多种行为发生变化),这时候如果仅通过if来处理,会使代码复杂度不可控。我们保以认为strategy模式更多的是解决不同状态下,单行为的变化;而state-pattern则是解决不同状态下多行为的变化。

应用场景

如果一个对象在不同的状态下,需要表现出不同的行为,这时候我们可以采用状态模式。一个非常经典的应用场景是状态机,它可以很好地描述状态机的变化;例如我们经常学到的电梯控制逻辑。

原理图

image

State:状态接口,定义多种行为接口,当然也可以处理一种行为,如上原理图

  • ContreteSate:不同状态下的行为表现方式

  • Context:上下文,我们这里可以理解为为状态变化控制条件。

示例

以以下背景为例:

工人一日三餐,餐餐不同。

public interface MealState {
    public void drink();
    public void eat();
}
public class BreakfastState implements MealState {
    public void drink() {
        System.out.println("drink milk");
    }
    public void eat() {
        System.out.println("eat bread");
    }
}
public class LunchState implements MealState {
    public void drink() {
        System.out.println("drink juice");
    }
    public void eat() {
        System.out.println("eat noodle");
    }
}
public class DinnerState implements MealState {
    public void drink() {
        System.out.println("drink wine");
    }
    public void eat() {
        System.out.println("eat Steak");
    }
}
@AllArgsConstructor
public class Worker {
    @Setter
    private MealState state;

    public void haveAMeal() {
        state.drink();
        state.eat();
    }

    public static void main() {
        Worker context = new Worker(new BreakfastState());
        context.haveAMeal();
        context.setState(new LunchState());
        context.haveAMeal();
        context.setState(new DinnerState());
        context.haveAMeal();
    }
}

参考

https://en.wikipedia.org/wiki/State_pattern

相关文章

  • State pattern-状态模式

    解决问题 主要解决由于状态不同而导致对象行为发生复杂变化(特别是多种行为发生变化),这时候如果仅通过if来处理,会...

  • State模式

    状态模式(State模式) 定义 状态模式,又称状态对象模式(Pattern of Objects for S...

  • State状态模式

    状态模式的核心是将状态抽象为类,然后将状态的改变包含在类中,这样就避免了在client中写出大量的if...els...

  • 状态模式(State)

    结构 模式的组成环境类(Context): 定义客户感兴趣的接口。维护一个ConcreteState子类的实例,...

  • 状态模式(State)

    定义允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects fo...

  • 状态模式-state

    允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了他的类 state是一个接口,定义了基本操作,co...

  • 状态模式(State)

    1、概念 状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类,属于行为型模式。 2...

  • 状态模式(State)

    状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。代替大量if el...

  • 状态模式(State)

    参考博客iOS App的设计模式开发中对State状态模式的运用 使用场景: 例子1:按钮来控制一个电梯的状态,一...

  • 状态(State)模式

网友评论

    本文标题:State pattern-状态模式

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