首页 > 其他分享 >状态模式(State)

状态模式(State)

时间:2022-11-26 22:57:00浏览次数:39  
标签:状态 state void System 模式 State public

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

应用:

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

结构:

  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());
    }
}

测试结果:

 

 

  

标签:状态,state,void,System,模式,State,public
From: https://www.cnblogs.com/lurenjia-bky/p/16928560.html

相关文章

  • Pytorch:使用Tensorboard记录训练状态
    我们知道TensorBoard是Tensorflow中的一个强大的可视化工具,它可以让我们非常方便地记录训练loss波动情况。如果我们是其它深度学习框架用户(如Pytorch),而想使用TensorBoard工......
  • 模板方法模式(Template)
    做一件事情,流程是固定的,其中存在不确定的同一类事务。例如:去店里吃饭:1、进入店铺。2、点单。3、吃饭。不确定的是第二步:点单。实现:在父类中定义好统一的......
  • 策略模式(Strategy)
    当处理同一个对象有多个处理算法的时候,使用一个策略对象来选择处理算法。  例子:对于客户的优惠率。算法实现统一的接口:publicinterfaceStrategy{pub......
  • 设计模式之创建型模式
    创建型模式:提供创建对象的机制,提升已有代码的灵活性和可复⽤性。PS:博客根据it老齐大话设计模式课程课件进行整理,IT老齐视频学习网站:https://www.itlaoqi.com包含的设......
  • 解释器模式(Interpreter)
    自定义解析器。需要:构建语法树,定义终结符与非终结符。 替代方案:Java中使用脚本引擎运行脚本语言......
  • 访问者模式(Visitor)
    表示一个作用于某对象结构中的各个元素的操作,使我们在不改变元素的类的前提下定义作用于这些元素的新操作。使用场景:对象结构比较稳定,但经常需要在此对象结构上定义新的......
  • 外观模式(也叫做门面模式)
    外观模式(也叫做门面模式):影院管理项目:         外观模式的基本介绍:   外观模式的原理类图:   原理类图的说明(外观模式的角色)1)外观类(F......
  • 命令模式(Command)
    将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。 结构:......
  • 企业办公新模式,随时随地云上协同!
    如今,越来越多人参与到项目中进行协同,因此对企业内部的协同办公提出了更高的要求,同时加之大环境下的居家办公要求,导致很多人一回到家之后就会出现无电脑可用、没有办公室电脑......
  • [XState] raise event: trigger an action immediately when reach target state
    import{Machine,actions}from"xstate";const{raise}=actions;//Demostrate`raise`actionconststubbornMachine=Machine({id:"raisedmo",initi......