首页 > 编程语言 >java设计模式(十七)状态模式(State Pattern)

java设计模式(十七)状态模式(State Pattern)

时间:2024-07-12 13:57:02浏览次数:18  
标签:状态 java Pattern void State context handle 设计模式 public

1、模式介绍:

状态模式(State Pattern)是一种行为型设计模式,用于实现对象状态的变化管理。它允许一个对象在其内部状态发生变化时改变其行为,使得对象看起来似乎修改了其类。

2、应用场景:

当一个对象的行为取决于其状态,并且需要在运行时根据状态改变其行为时。
当状态转换过程中需要维护一致性,确保状态之间的切换不会引起不良后果。
当对象的某些状态导致大量条件语句时,可以使用状态模式简化代码。

3、优点:

封装性良好:将与特定状态相关的行为局部化,并将不同状态的行为分离。
易于添加新状态:通过定义新的子类可以很容易地增加新的状态和转换。
减少条件语句:避免了大量的条件判断语句,提高了代码的可维护性。

4、缺点:

可能会导致类的数量增加,因为每个状态都需要一个对应的类。
如果状态转换很频繁,并且状态对象很小,可能会引起较多的对象创建开销。

5、代码示例:

public interface State {
    void handle();
}


public class CloseState implements State{
    @Override
    public void handle() {
        System.out.println("电梯关闭...");
        // 具体关闭状态的操作
    }
}

public class OpenState implements State {
    @Override
    public void handle() {
        System.out.println("电梯开启...");
        // 具体开启状态的操作
    }
}

public class RunningState implements State {
    @Override
    public void handle() {
        System.out.println("电梯运行...");
        // 具体运行状态的操作
    }
}

public class StoppingState implements State{
    @Override
    public void handle() {
        System.out.println("电梯停止...");
        // 具体停止状态的操作
    }
}

/**
 * 应用上下文类
 *
 * @author fengmingming
 * @date 2024/7/5 14:07
 */
public class StateContext {
    private State state;

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

    public void request() {
        state.handle();
    }
}

public class StateClient {
    public static void main(String[] args) {
        StateContext context = new StateContext();

        // 设置初始状态为关闭状态
        context.setState(new CloseState());

        // 请求电梯运行
        context.request();

        // 切换到开启状态
        context.setState(new OpenState());
        context.request();

        // 切换到运行状态
        context.setState(new RunningState());
        context.request();

        // 切换到停止状态
        context.setState(new StoppingState());
        context.request();
    }
}

6、结果展示:

标签:状态,java,Pattern,void,State,context,handle,设计模式,public
From: https://blog.csdn.net/weixin_70044963/article/details/140163864

相关文章

  • java设计模式(十四)策略模式(Strategy Pattern)
    1、模式介绍:策略模式是一种行为设计模式,它定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。2、应用场景:当一个对象有多种行为,而需要动态选择一种行为时。不同的策略可以实现不同的行为,客户端根据需要在运行时选择合适的策略。当......
  • [Java]“不同族”基本数据类型间只能“强转”吗?
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18298193出自【进步*于辰的博客】本文阐述需要计算不同位二进制的表示范围,引用博文《[MySQL]知识点》中的【数据范围通式】一栏得出的计算公式。虽然Java与MySQL属不同体系,......
  • Java性能优化-switch-case和if-else速度性能对比,到底谁快?
    场景Java中使用JMH(JavaMicrobenchmarkHarness微基准测试框架)进行性能测试和优化:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131723751参考以上性能测试工具的使用。下面针对Java中对switch-case和if-else在速度方面的性能做测试。注:博客:https://blog......
  • java实现浅拷贝与深拷贝
    目录浅拷贝 深拷贝实现cloneable接口序列化浅拷贝浅拷贝是指创建一个新的对象,该对象的内容是原始对象中各项的引用。换句话说,浅拷贝仅复制了原始对象中元素的引用,而不是元素本身的拷贝classPeopleimplementsCloneable{privateStringname;privateint......
  • 【日常记录-Java】自定义进程池
    Author:赵志乾Date:2024-07-12Declaration:AllRightReserved!!!1.简介    服务器上有些进程需要池化管理,使用SpringBoot构建Web服务提供管理api,内部使用自定义的进程池维护已启动的进程;    核心点: 进程池管理的进程都会使用系统的一个端口对外提供服务; ......
  • AC_patterns的生成过程
    at-speed技术用来测试电路正常工作的时序是否有问题,进而确定电路能否正常工作。这种技术测试的故障叫做transitionfault,同样这种技术也叫transitionfaulttest。想要实现这种技术,一对测试pattern(V1,V2),需要应用到测试电路当中(CircuitUnderTest,CUT)。V1用来初始化电......
  • c/c++设计模式---访问者模式
    访问者(Visitor)模式:访问器模式,行为型模式。  //(1)一个具体范例的逐渐演化  //阿司匹林肠溶片:改善血液流通,预防血栓形成,血栓形成就产生阻塞,人就会直接面临危险;  //氟伐他汀钠缓释片:降血脂。因为血脂高意味着血流慢,营养无法运输到身体各部位,还很可能引发心脑血管疾病;......
  • Java怎么统计每个项目下的每个类别的数据
    为了演示如何在Java中统计每个项目下的每个类别的数据,我们可以考虑一个简单的场景:假设我们有一个电商系统,需要统计每个商品分类在每个店铺下的销售数量。这里我们将使用Java的集合框架,如HashMap和ArrayList,来存储和统计数据。1.使用Java的集合框架HashMap和ArrayList来存储和统计......
  • 关于Java内存区域的理解和记录
    近期做项目遇到了FullGC的问题,干脆总结一下Java内存区域分布和垃圾回收是咋回事。Java内存区域按照线程隔离状态直接分成三大块空间:线程私有:程序计数器是一块较小的内存空间,可以看做当前线程所执行的字节码的行号指示器。在虚拟机概念模型里,字节码解释器工作时就是通过改变这......
  • Java中的递归算法详解
    Java中的递归算法详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!1.什么是递归算法?递归算法是指在函数的定义中使用函数自身调用的方法。在算法中,递归通常用于解决可以被拆分为相似子问题的问题,每个子问题都是原始问题的一部分。2.递归算法的基本......