魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • DesignPattern - 状态模式

文章摘要: 状态模式使用总结。

简介

简要说明

  • 状态模式(State Pattern)是一种行为型设计模式。
  • 将每个状态的行为封装到独立的状态类中,并将状态转换逻辑委托给这些状态类,从而使得状态转换对上下文来说是透明的。

主要功能

  • 将与特定状态相关的行为局部化,并将不同状态的行为分割开来。
  • 允许状态转换逻辑与状态对象合成一体,而不是分布在上下文中。
  • 状态对象可以被共享,减少了上下文对象中的条件判断。

注意事项

  • 状态模式可能会导致系统中类数量增加,增加了系统的复杂性。
  • 状态转换逻辑可能会变得复杂,尤其是在状态很多的情况下。

适用场景

  • 对象的行为依赖于它的状态(属性),并且它可以在运行时根据状态改变行为。
  • 代码中包含大量与对象状态有关的条件语句,这些条件语句可以根据对象的状态进行重构。

Java 8

案例

// 状态接口
interface State {
    void handle(Context context);
}

// 具体状态类:开启状态
class OnState implements State {
    @Override
    public void handle(Context context) {
        System.out.println("灯泡已经开启。");
        // 在开启状态下,调用toggle方法切换到关闭状态
        context.setState(new OffState());
    }
}

// 具体状态类:关闭状态
class OffState implements State {
    @Override
    public void handle(Context context) {
        System.out.println("灯泡已经关闭。");
        // 在关闭状态下,调用toggle方法切换到开启状态
        context.setState(new OnState());
    }
}

// 上下文类
class Context {
    private State state;

    // 设置状态
    public void setState(State state) {
        this.state = state;
    }

    // 用户操作,委托给状态对象处理
    public void toggle() {
        state.handle(this);
    }
}

// 客户端代码
public class StatePatternDemo {
    public static void main(String[] args) {
        // 创建上下文对象
        Context context = new Context();
        // 设置初始状态为开启状态
        context.setState(new OnState());

        // 连续切换状态两次
        context.toggle(); // 输出:灯泡已经开启。
        context.toggle(); // 输出:灯泡已经关闭。
    }
}

注释

  • 在这个例子中,State是一个接口,定义了一个handle方法,用于处理来自上下文对象的请求。OnState和OffState是具体的状态类,它们实现了State接口,并根据当前状态提供了相应的行为。
  • Context类是上下文类,它持有一个State对象,并通过setState方法来设置当前状态。toggle方法是用户操作的方法,它将请求委托给当前状态对象处理。
  • 在客户端代码StatePatternDemo中,我们创建了Context对象,并设置了初始状态为OnState。通过调用toggle方法,我们可以看到状态在开启和关闭之间切换,并且相应的行为也被正确地执行。
更新时间: 2025/10/3 17:56