23种设计模式,状态模式的概念优缺点以及JAVA代码举例

简介: 【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。

状态模式(State Pattern)

状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。

概念

  • Context(上下文):维护一个指向当前状态的引用,并允许客户端进行操作,其行为随着其状态对象的改变而改变。
  • State(状态):定义一个接口,封装与上下文的一个特定状态相关的行为。
  • Concrete States(具体状态):实现状态接口的类,每一个类代表了上下文的一种状态。

优点

  1. 封装了转换规则:状态模式将所有与特定状态相关的行为放到一个对象中。
  2. 通过将所有状态相关的代码放在一个位置,简化了上下文:上下文变得非常简单,只需要维护一个当前状态的引用,并将所有状态的工作委托给状态对象。
  3. 允许新增状态类来改变行为:通过创建新的具体状态类,可以很容易地添加新的状态和转换。

缺点

  1. 可能会导致类的数目增加:每增加一个状态,就需要增加一个具体状态类,这可能会导致系统中类的数量剧增。
  2. 可能会导致某些状态和转换的逻辑复杂化:如果状态数目过多或转换逻辑过于复杂,会使得系统难以理解和维护。

Java代码示例

考虑一个简单的文本编辑器,具有两种状态:正常状态和删除状态,可以在这两种状态之间切换,并根据当前状态执行不同操作。

java复制代码

// 状态接口
interface State {
    void writeName(StateContext context, String name);
}

// 具体状态1:正常状态
class NormalState implements State {
    public void writeName(StateContext context, String name){
        System.out.println(name);
    }
}

// 具体状态2:删除状态
class DeleteState implements State {
    public void writeName(StateContext context, String name){
        System.out.println(name.toUpperCase().replace("A", ""));
    }
}

// 上下文
class StateContext {
    private State currentState;

    public StateContext(){
        currentState = new NormalState();
    }

    public void setState(State state) {
        currentState = state;
    }

    public void writeName(String name){
        currentState.writeName(this, name);
    }
}

// 客户端代码
public class StatePatternDemo {
    public static void main(String[] args) {
        StateContext context = new StateContext();

        context.writeName("Saturday");
        context.setState(new DeleteState());
        context.writeName("Saturday");
    }
}

在这个例子中,StateContext 类维护了一个当前状态的引用,并允许客户端根据当前状态执行操作。NormalStateDeleteState 是具体状态,分别实现了 State 接口。客户端通过改变上下文的状态,可以改变上下文行为,从而实现在不同状态下执行不同操作的功能。

相关文章
|
6天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
18 0
[Java]23种设计模式
|
22天前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
2月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
2月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
22天前
|
设计模式 Java
Java设计模式
Java设计模式
24 0
|
25天前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
26 0
|
25天前
|
设计模式 Java
Java设计模式之桥接模式
这篇文章介绍了Java设计模式中的桥接模式,包括桥接模式的目的、实现方式,并通过具体代码示例展示了如何分离抽象与实现,使得两者可以独立变化。
37 0
|
25天前
|
设计模式 Java
Java设计模式之适配器模式
这篇文章详细讲解了Java设计模式中的适配器模式,包括其应用场景、实现方式及代码示例。
36 0
|
2月前
|
设计模式 缓存 算法
Java设计模式-访问者模式(22)
Java设计模式-访问者模式(22)