学而时习之,不亦说乎。|

状态模式(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 @   在博客做笔记的路人甲  阅读(195)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起