当前位置: 首页 > news >正文

基础建设审计网站百度广告商

基础建设审计网站,百度广告商,wordpress模版版权如何删除,网站建设费记到什么科目状态模式是一种行为设计模式#xff0c;允许一个对象在其内部状态改变时改变它的行为#xff0c;使其看起来修改了自身所属的类。其别名为状态对象(Objects for States)。 State is a behavior design pattern that allows an object to change its behavior when its inter…状态模式是一种行为设计模式允许一个对象在其内部状态改变时改变它的行为使其看起来修改了自身所属的类。其别名为状态对象(Objects for States)。 State is a behavior design pattern that allows an object to change its behavior when its internal state changes, making it appear to have modified the class it belongs to.在很多情况下一个对象的行为取决于一个或多个动态变化的属性这样的属性叫做状态这样的对象叫做有状态的(stateful)对象这样的对象状态是从事先定义好的一系列值中取出的。 当一个这样的对象与外部事件产生互动时其内部状态就会改变从而使得系统的行为也随之发生变化。 在UML中可以使用状态图来描述对象状态的变化。 结构设计 Context上下文类保存了对于一个Concrete State对象(具体状态对象)的引用并会将所有与该状态相关的工作委派给它。上下文通过状态接口与状态对象交互。 State状态基类接口会声明特定于状态的方法。 Concrete State具体状态类会自行实现特定于状态的方法。当多个状态中包含相似代码可以提供一个封装有部分通用行为的中间抽象类。 状态对象可存储对于上下文对象的反向引用。状态对象可以通过该引用从上下文处获取所需信息并且能触发状态转移。但这可能会带来对象的循环引用在实际使用时要通过对象传参的方式使用。 状态模式类图表示如下 状态模式可能看上去与策略模式相似但有一个关键性的不同——在状态模式中特定状态知道其他所有状态的存在且能触发从一个状态到另一个状态的转换而策略则几乎完全不知道其他策略的存在。 伪代码实现 接下来将使用代码介绍下状态模式的实现。 // 1、State状态接口声明特定于状态的方法 public interface IState {void handle(StateContext context);void doSomething(); }// 2、具体状态类会自行实现特定于状态的方法这里特定状态知道其他所有状态的存在且能触发从一个状态到另一个状态的转换 public class ConcreteStateA implements IState {private static ConcreteStateA state;// 这里的单例实现暂不考虑并发场景public static IState getInstance() {if (state null) {state new ConcreteStateA();}return state;}Overridepublic void handle(StateContext context) {doSomething();context.setCurrentState(ConcreteStateB.getInstance());}Overridepublic void doSomething() {System.out.println(do some thing in the concrete A instance);} } public class ConcreteStateB implements IState {private static ConcreteStateB state;// 这里的单例实现暂不考虑并发场景public static IState getInstance() {if (state null) {state new ConcreteStateB();}return state;}Overridepublic void handle(StateContext context) {doSomething();context.setCurrentState(ConcreteStateA.getInstance());}Overridepublic void doSomething() {System.out.println(do some thing in the concrete B instance);} }// 3、状态上下文类保存了对于一个Concrete State对象(具体状态对象)的引用并会将所有与该状态相关的工作委派给它。 // 上下文通过状态接口与状态对象交互。 public class StateContext {private IState currentState;public StateContext(IState defaultState) {this.currentState defaultState;}public IState getCurrentState() {return this.currentState;}public void setCurrentState(IState newState) {this.currentState newState;}public void request() {currentState.handle(this);} }// 4、客户端 public class StateClient {public void test() {StateContext stateContext new StateContext(new ConcreteStateA());stateContext.request();stateContext.request();stateContext.request();} }适用场景 在以下情况下可以考虑使用状态模式 (1) 对象的行为依赖于它的状态(属性)并且可以根据它的状态改变而改变它的相关行为同时状态的数量非常多且与状态相关的代码会频繁变更的话可以考虑使用状态模式。 (2) 代码中包含大量与对象状态有关的条件语句这些条件语句的出现会导致代码的可维护性和灵活性变差不能方便地增加和删除状态 使客户类与类库之间的耦合增强。在这些条件语句中包含了对象的行为而且这些条件对应于对象的各种状态。 (3) 当相似状态和基于条件的状态机转换中存在许多重复代码时可考虑使用状态模式。状态模式能够生成状态类层次结构通过将公用代码抽取到抽象基类中来减少重复。 优缺点 状态模式有以下优点 (1) 封装了转换规则。调用方无需关心状态转换的实现。 (2) 符合开闭原则。无需修改已有状态类和上下文就能引入新状态。 (3) 符合单一职责原则。将与特定状态相关的代码放在单独的类中。 (4) 消除了可能存在的条件语句。通过消除臃肿的状态机条件语句简化上下文代码。 (5) 可以让多个环境对象共享一个状态对象从而减少系统中对象的个数。 但是该模式也存在以下缺点 (1) 如果状态机只有很少的几个状态 或者很少发生改变 那么应用该模式可能会显得小题大作。 (2) 增加系统类和对象的个数。 (3) 实现较为复杂如果使用不当将导致程序结构和代码的混乱。 (4) 对“开闭原则”的支持并不太好对于可以切换状态的状态模式增加新的状态类需要修改那些负责状态转换的源代码否则无法切换到新增状态而且修改某个状态类的行为也需修改对应类的源代码。 参考 《设计模式 可复用面向对象软件的基础》 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 著, 李英军, 马晓星等译 https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/state.html 状态模式 https://refactoringguru.cn/design-patterns/state 状态模式 https://www.runoob.com/design-pattern/state-pattern.html 状态模式 https://www.cnblogs.com/adamjwh/p/10926952.html 简说设计模式——状态模式
http://www.zqtcl.cn/news/400463/

相关文章:

  • 绍兴市交通建设有限公司网站陕西建设分行网站
  • 如何套用别人网站做页面自己创建app
  • 建国内外网站有什么区别永久免费视频会议服务器
  • 个人网站备案成功后怎么做网站开发要学哪些知识
  • 论文写作数据网站餐饮招商
  • 嘉祥网站建设公司小企业网站建设多少钱
  • 做设计.不抠图网站114在线查询电话
  • 上饶网站制作需要多少钱网站百度地图标注
  • 微信网站二次开发广州番禺人才网
  • 支部网站及活动室建设免费建设网站有哪些
  • 深圳福田专业网站推广互联网网站开发有哪些职位
  • 手机网站生成西安北郊做网站
  • 深圳宝安区网站建设南通建设厅网站
  • 介绍做网站的标题在线图片编辑器好用吗
  • 金华建设网站公司笔记本销售网站开发的背景
  • 国外做的好看的网站设计网络营销推广方案怎么做
  • 网站建站业务wordpress网站域名地址
  • 烟台网站制作这做菠菜网站
  • 网站建设vr百度站长
  • 织梦网站广告代码如何写网页设计你若安好便是晴天作业
  • 网站建设 上海wordpress 知更鸟 公告
  • 建小说网站需要多少钱罗湖区住房和建设网站
  • 湖南专业网站建设服务做网站的底图尺寸多大
  • 山东省住房与建设厅网站首页有名的wordpress主题商
  • 常州市金坛区网站建设毕业设计代做淘宝好还是网站好
  • 品牌网站建设营销型网站设计网站整合方案
  • 网站开发设计师网站代理什么意思
  • 网站层级关系邯郸品牌商标vi设计策划公司
  • 网站开发产品需求说明小网站代码
  • 苏州网站推广排名网站建设方案范文8篇