文章标题 末蓝、 2022-06-05 07:59 241阅读 0赞 状态模式 状态模式定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的问题是:当控制一个对象状态转换的条件表达式过于复杂时的情况。此时把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。 状态模式结构图为: ![这里写图片描述][SouthEast] 状态模式结构图代码解析: //抽象状态类 abstract class State{ public abstract void handle(Context context); } //ConcreteState类,指定具体状态,每一个子类实现一个与Context的一个状态相关的行为。 class ConcreteStateA(){ @Override public void handle(Context context){ //设置ConreteStateA 的下一状态为ConreteStateB context.setState(new ConcreteStateB()); } } class ConcreteStateB(){ @Override public void handle(Context context){ //设置ConreteStateB 的下一状态为ConreteStateA context.setState(new ConcreteStateA()); } } //Context类,维护一个ConcreteState 子类的实例,这个实例定义当前状态 class Context{ private State state; public Context(State state){ this.state = state; } //可以重新设置状态 public void setState(State state){ this.state = state; print("当前状态:" + state); } //获取当前状态 public State getState(){ return state; } //处理请求,并设置下一状态 public void request(){ //处理请求。。。。 //不符合条件则进入下一状态。 state.handle(this); } } //客户端代码 public class Main{ public static void main(String[] args){ //设置Context初始状态为 ConcreteStateA Context c = new Context(new ConcreteStateA()); c.request(); //Context中的State子类实例已经被改变。 c.request(); c.request(); c.request(); } } 状态模式的好处:将与特定状态相关的行为局部实例化,并且将不同状态的行为分割开来。这样的目的就是消除庞大的条件分支语句。状态模式通过把各种状态转移逻辑分布到各个State子类中,减少相互依赖,这也符合开闭原则和单一职责原则。 什么时候用状态模式呢?当一个对象的行为取决于他的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式。如果业务需求某项业务有多个状态,通常都是枚举常量,状态的变化都是靠大量分支判断语句来实现,此时可以将每一种业务状态定义为一个State的子类。 [SouthEast]: /images/20220605/4bfe47979ce241409e0185fbe51b7445.png
相关 文章标题 新买笔记本到底应不应该一直接上电源充电呢? 1.对于我们大家来说,新买的电脑都是比较好奇,关心,平常下个软件,看个浏览器等等都非常小心的,这也是人之常情吗!新买的电脑最好别 港控/mmm°/ 2022年07月11日 15:35/ 0 赞/ 152 阅读
相关 文章标题 CSDN MarkDown语法写博客 二级标题 介绍内容 分隔线:空行,再加上三个横杠— 三级标题 无序列表项一 (横杠 加空格) 无序列表项一 不念不忘少年蓝@/ 2022年06月15日 09:23/ 0 赞/ 188 阅读
相关 文章标题 java自带垃圾回收,因此内存泄漏是很隐蔽的,主要原因是对一个对象的引用被无意识的保留下来,垃圾回收机制不仅不会处理这个对象,也不会处理被这个对象所引用的所有其他对象。———— 柔情只为你懂/ 2022年06月10日 10:23/ 0 赞/ 210 阅读
相关 文章标题 To follow the path: look to the master, follow the master, walk with the 末蓝、/ 2022年06月09日 07:13/ 0 赞/ 202 阅读
相关 文章标题 售票厅 【问题描述】 售票厅出售关于音乐会的票,取代原来的卖一张票的形式,而是一组座号连续的票。售票室已经收到很多预订。每个预订包含指定最小座号的一组连续的票。 售 ╰半夏微凉°/ 2022年06月09日 03:49/ 0 赞/ 224 阅读
相关 文章标题 脚本传参 当我们运行脚本的时候,./shell.sh 10 20 其实10和20 已经传递进去了,我们可以在脚本中用$0, $1,$2获得参数,以此往下类推获得传入的更 柔光的暖阳◎/ 2022年06月09日 03:08/ 0 赞/ 162 阅读
相关 文章标题 用AJAX简单实现注册页面的用户名检测 js代码: <script> // 原生的方式使用AJAX // function getXMLHttpRequest( 旧城等待,/ 2022年06月09日 02:49/ 0 赞/ 240 阅读
相关 文章标题 状态模式 状态模式定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的问题是:当控制一个对象状态转换的条件表达式过于复杂时的情 末蓝、/ 2022年06月05日 07:59/ 0 赞/ 242 阅读
相关 文章标题 apache端口被异常占用导致无法启动的解决方法 最近遇到LNMPA一键安装包的Apache无法启动的问题,Apache提示以下信息: (98)Address alre 红太狼/ 2022年06月03日 01:54/ 0 赞/ 233 阅读
相关 文章标题 coding:utf-8 author = “xshengjing” from Tkinter import \ class App: def init(se Myth丶恋晨/ 2021年09月13日 22:56/ 0 赞/ 335 阅读
还没有评论,来说两句吧...