设计模式21-状态模式,State)

技术设计模式21-状态模式,State) 设计模式21-状态模式(State)如果一个实体具备状态,且在不同状态下会在同一业务场景执行不同的业务逻辑时,就可以考虑使用状态模式。设计模式21-状态模式(S

设计模式21-状态模式(州)

如果一个实体具备状态,且在不同状态下会在同一业务场景执行不同的业务逻辑时,就可以考虑使用状态模式。

设计模式21-状态模式(State)

概述

如果一个实体具备状态,且在不同状态下会在同一业务场景执行不同的业务逻辑时,就可以考虑使用状态模式。

优点

容易新加状态,封装了状态转移规则,每个状态可以被复用和共享。

避免大量的如果不是这样结构。

缺点

状态类膨胀。

新加入状态时,可能需要修改现有的状态实现。

简单实现

JDK实现

公共接口状态[

/**

*打开手机

*/

void open();

/**

*关闭手机

*/

void close();

}

@Slf4j

公共类等待状态实现了州{

私有最终MobileModel模型;

公共等待状态(移动模型){ 0

模型=模型

}

@覆盖

public void open(){ 0

log.info(‘开启手机中。’);

this.model.setState(新的OpenState(这个。模型));

}

@覆盖

public void close(){ 0

log.info(‘关闭手机中。’);

this.model.setState(新CloseState(此。模型));

}

}

@Slf4j

公共类OpenState实现了州{

私有最终MobileModel模型;

公共OpenState(MobileModel模型){ 0

模型=模型

}

@覆盖

public void open(){ 0

log.info(‘手机已开启’);

}

@覆盖

public void close(){ 0

log.info(‘关闭手机中。’);

model.setState(新CloseState(此。模型));

}

}

@Slf4j

公共类关闭状态实现了州{

私有最终MobileModel模型;

公共关闭状态(移动模式模型){ 0

模型=模型

}

@覆盖

public void open(){ 0

log.info(‘开启手机中。’);

this.model.setState(新的OpenState(这个。模型));

}

@覆盖

public void close(){ 0

log.info(‘手机已关闭’);

}

}

状态模式中具体实现功能的代码被封装到了状态的实现类中,上下文通过设置不同的状态实现类。

公共类MobileModel {

私人国家;

public MobileModel() { }

公共移动模型(州)

这个.状态=状态

}

公共无效设置状态(州状态){ 0

这个.状态=状态

}

public void open(){ 0

国家。open();

}

public void close(){ 0

国家。close();

}

}

在同一场景中根据不同的状态来调用不同的业务逻辑。

公共类设计模式

@测试

public void statdesignpattern(){ 0

移动模型=新移动模型();

model.setState(新的等待状态(模型));

模特。open();

模特。open();

模特。close();

模特。close();

模特。open();

}

}

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/53731.html

(0)

相关推荐

  • 漫道,雄关漫道真如铁的雄关什么意思

    技术漫道,雄关漫道真如铁的雄关什么意思雄关漫道真如铁的“雄关”指的是娄山关。这是来自毛主席《忆秦娥·娄山关》中的词句。原文是:“西风烈漫道,长空雁叫霜晨月。霜晨月,马蹄声碎,喇叭声咽。雄关漫道真如铁,而今迈步从头越。从头

    生活 2021年10月28日
  • JQuery如何删除UL最后一个li

    技术JQuery如何删除UL最后一个li本篇内容主要讲解“JQuery如何删除UL最后一个li”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JQuery如何删除UL最后一个l

    攻略 2021年11月15日
  • openwrt lan口改成dhcp(openwrt wan口怎么设置)

    技术openwrt 19.7 驱动如何添加rndis模式4G模块这篇文章主要介绍openwrt 19.7 驱动如何添加rndis模式4G模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在linu

    攻略 2021年12月17日
  • 速度单位换算,路程,速度,时间的关系式是什么

    技术速度单位换算,路程,速度,时间的关系式是什么路程速度单位换算,速度,时间的关系式是速度=路程/时间。科学上用速度来表示物体运动的快慢。速度在数值上等于单位时间内通过的路程。速度的计算公式:V=S/t。速度的单位是m/

    生活 2021年10月30日
  • wcf服务接口定义的前面需要注解啥(wcf序列化是在客户端还是服务端)

    技术WCF服务元数据结构模式是怎样的这篇文章主要介绍“WCF服务元数据结构模式是怎样的”,在日常操作中,相信很多人在WCF服务元数据结构模式是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年12月14日
  • YOLOv3-tiny怎么在VS2015上使用Openvino部署

    技术YOLOv3-tiny怎么在VS2015上使用Openvino部署YOLOv3-tiny怎么在VS2015上使用Openvino部署,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题

    攻略 2021年11月10日