文章标题 末蓝、 2022-06-05 07:59 326阅读 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
相关 文章标题 \[数据库\]关于 Oracle 11g r2 Enterprise Manager (EM) 在windows环境无法启动的解决办法 在环境变量中添加以下三个变量: O 梦里梦外;/ 2022年07月21日 00:04/ 0 赞/ 67 阅读
相关 文章标题 应用层open,write,read根据打开文件的属性找到对应的硬件或者存储设备驱动。 驱动框架 一、LED驱动框架 (1)、写出len\_open,len\_re ╰+哭是因爲堅強的太久メ/ 2022年07月14日 20:29/ 0 赞/ 59 阅读
相关 文章标题 > 原文: [ASM file number 7][] > 作者: Bane Radulovic > 译者:郭旭瑞,沃趣科技产品交付部经理,负责QData Cloud高 柔光的暖阳◎/ 2022年07月12日 11:26/ 0 赞/ 88 阅读
相关 文章标题 CSDN MarkDown语法写博客 二级标题 介绍内容 分隔线:空行,再加上三个横杠— 三级标题 无序列表项一 (横杠 加空格) 无序列表项一 不念不忘少年蓝@/ 2022年06月15日 09:23/ 0 赞/ 258 阅读
相关 文章标题 html部分 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> 小咪咪/ 2022年06月09日 13:39/ 0 赞/ 111 阅读
相关 文章标题 售票厅 【问题描述】 售票厅出售关于音乐会的票,取代原来的卖一张票的形式,而是一组座号连续的票。售票室已经收到很多预订。每个预订包含指定最小座号的一组连续的票。 售 ╰半夏微凉°/ 2022年06月09日 03:49/ 0 赞/ 292 阅读
相关 文章标题 用AJAX简单实现注册页面的用户名检测 js代码: <script> // 原生的方式使用AJAX // function getXMLHttpRequest( 旧城等待,/ 2022年06月09日 02:49/ 0 赞/ 319 阅读
相关 文章标题 状态模式 状态模式定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的问题是:当控制一个对象状态转换的条件表达式过于复杂时的情 末蓝、/ 2022年06月05日 07:59/ 0 赞/ 327 阅读
相关 文章标题 apache端口被异常占用导致无法启动的解决方法 最近遇到LNMPA一键安装包的Apache无法启动的问题,Apache提示以下信息: (98)Address alre 红太狼/ 2022年06月03日 01:54/ 0 赞/ 314 阅读
相关 文章标题 coding:utf-8 author = “xshengjing” from Tkinter import \ class App: def init(se Myth丶恋晨/ 2021年09月13日 22:56/ 0 赞/ 418 阅读
还没有评论,来说两句吧...