状态模式(State)

当类的行为是基于它的状态改变时,使用状态模式。比如红绿灯控制路口司机的行为。

应用:

  用来解决系统中复杂对象的状态转换,以及不同状态下的行为封装问题。

结构:

  State抽象类。

  State实现类:封装了一个状态对应的行为。

  上下文类:它持有一个State对象,定义了当前的状态。


例子:

  酒店有空闲、已预定、已入住三个状态。

类图结构:

 

代码实现:

抽象类:

public interface State {
    void handler();//处理器
}

实现类1,状态为空闲:

class FreeState implements State{
    @Override
    public void handler() {
        System.out.println("房间空闲");
    }
}

实现类2,状态为以被预定:

class BookedState implements State{
    @Override
    public void handler() {
        System.out.println("房间已被预定");
    }
}

实现类3,状态为以入住:

class CheckedState implements State{
    @Override
    public void handler() {
        System.out.println("房间以有人入住");
    }
}

上下文类,状态管理器:

public class HomeContext {
    private State state;//持有状态引用

    public void setState(State state) {
        System.out.println("状态修改!");
        this.state = state;
        state.handler();
    }
}

测试:

public class Client {
    public static void main(String[] args) {
        //管理状态
        HomeContext ctx = new HomeContext();
        //设置状态:已有人入住
        ctx.setState(new BookedState());
        System.out.println("--------------");
        //设置状态:空闲
        ctx.setState(new FreeState());
    }
}

测试结果:

 

 

  

posted @ 2022-11-26 22:44  在博客做笔记的路人甲  阅读(176)  评论(0编辑  收藏  举报