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

相关推荐

  • CF161D Distance in Tree 题解

    技术CF161D Distance in Tree 题解 CF161D Distance in Tree 题解Description
    洛谷传送门
    Solution
    似乎各种做法都可以过,这里提供一篇 \

    礼包 2021年10月28日
  • 疯狂的诱惑,钟丽缇最让人心动的电影是哪部

    技术疯狂的诱惑,钟丽缇最让人心动的电影是哪部在说心动电影之前,请容我偷笑一下,因为我要提到的这部电影有点特别,它就是《晚娘》疯狂的诱惑。这部电影上映于2001年,当年三十多岁的钟丽缇,自从接演了陈可辛监制的泰国片《晚娘》

    生活 2021年10月27日
  • 执行truncate触发ORA-02266解决过程是怎样的

    技术执行truncate触发ORA-02266解决过程是怎样的这篇文章给大家介绍执行truncate触发ORA-02266解决过程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。开发提了个需求

    攻略 2021年12月8日
  • 首页css

    技术首页css 首页cssbody{ background-color: #CCCCCC;}.content ul{ padding-left: 0;}.content ul li{ display:

    礼包 2021年10月27日
  • 鼠标指针怎么换,Cursosr怎么换鼠标指

    技术鼠标指针怎么换,Cursosr怎么换鼠标指打开控制面板,双击“鼠标”,选择“指针”选项卡鼠标指针怎么换。可以更改方案,或者选中下面的某一状态,点击“浏览”,选择一个鼠标图片即可。
    但所有的鼠标的图片格式都是.cur的

    生活 2021年10月30日
  • 怎么用maven编译Java项目

    技术怎么用maven编译Java项目这篇文章将为大家详细讲解有关怎么用maven编译Java项目,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。需要时间:15分钟 文本编辑器或者IDE

    攻略 2021年12月8日