设计模式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)

相关推荐

  • web中HTTP 400错误请求无效的解救方法有哪些

    技术web中HTTP 400错误请求无效的解救方法有哪些这篇文章主要介绍“web中HTTP 400错误请求无效的解救方法有哪些”,在日常操作中,相信很多人在web中HTTP 400错误请求无效的解救方法有哪些问题上存在疑

    攻略 2021年11月5日
  • 五险一金指什么和社保,社保与五险一金有什么区别

    技术五险一金指什么和社保,社保与五险一金有什么区别社保与五险一金的区别1、社保和五险一金总体来说是概念不同五险一金指什么和社保:社保是社会保险的简称,是指养老保险、医疗保险、生育保险、失业保险、工伤保险五个险种。五险一金

    生活 2021年10月21日
  • 美国服务器:图床网站为什么一般首选美国机器

    技术美国服务器:图床网站为什么一般首选美国机器在搭建网站的过程中,图片起着至关重要的作用。鉴于它们的重要性,很多网站都会将高清图片存储在高质量的图床网站上,尤其是一些漫画类或者图片量比较大的论坛。因此,无论是自己搭建图床

    礼包 2021年10月30日
  • linux进程调度采用的是什么(linux进程调度详解)

    技术linux进程调度源码是什么这篇文章主要讲解了“linux进程调度源码是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux进程调度源码是什么”吧!下面是进程

    攻略 2021年12月17日
  • 第一次使用Swagger出现空指针异常

    技术第一次使用Swagger出现空指针异常 第一次使用Swagger出现空指针异常问题
    在第一次使用swagger时出现java.lang.NullPointerException。
    完整的错误信息如下

    礼包 2021年11月27日
  • Laravel基于reset怎么实现分布式事务

    技术Laravel基于reset怎么实现分布式事务这篇文章主要讲解了“Laravel基于reset怎么实现分布式事务”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Lara

    攻略 2021年11月9日