(03)状态模式

概念

人有开心和难过两种状态,当我开心的时候我就去上班,当我难过的时候我就不想上班,这种根据状态决定行为的方式,称为状态模式

实现方式

/**
 * 状态
 */
public class Demo {
    public static void main(String[] args) {
        Person person = new Person();
        // 改变状态为开心
        person.changeState(new Happy());
        person.behavior();
        // 改变状态为难过
        person.changeState(new Sad());
        person.behavior();
    }
}

// 状态,所有状态都要实现该接口
interface State {
    void doWork();
}

// 开心的状态
class Happy implements State {
    @Override
    public void doWork() {
        System.out.println("我今天开心,我去上班");
    }
}

// 难过的状态
class Sad implements State {
    @Override
    public void doWork() {
        System.out.println("我今天难过,不想上班,请假");
    }
}

// 人。 人的状态可能是开心,也可能是难过
class Person {
    private State state;

    public void changeState(State state) {
        this.state = state;
    }

    // 行为。根据状态决定作出什么行为
    public void behavior() {
        state.doWork();
    }
}

我今天开心,我去上班
我今天难过,不想上班,请假

状态和策略模式区别

  • 这两种模式在代码方面基本没什么区别,只是一种强调的是行为,一种强调的是状态
  • 策略模式强调的是一种行为。比如上班,那么策略模式强调的是上班的过程
  • 状态模式强调的是一种状态,根据状态可以触发哪种行为。比如我今天很开心,所以我去上班。强调的是开心,上班是由开心触发的一种行为
posted @ 2021-11-19 20:46  、嘎路的米。  阅读(47)  评论(0)    收藏  举报