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

wordpress简题浙江关键词优化

wordpress简题,浙江关键词优化,广东三网合一网站建设报价,深圳网站建设 网站制作 网站设计【迅美】旧版《Head First设计模式》 读书笔记11 状态模式 The State Pattern 问题引入 本章的实例问题是一个糖果机的控制器,有几个状态,不同的动作会有不同的响应。 比如投币再转动曲柄,会发放糖果,糖果没有了会显示售罄等等。 第一版的程序…

 

《Head First设计模式》 读书笔记11 状态模式

The State Pattern

问题引入

  本章的实例问题是一个糖果机的控制器,有几个状态,不同的动作会有不同的响应。

  比如投币再转动曲柄,会发放糖果,糖果没有了会显示售罄等等。

 

第一版的程序

  下面是一个从状态图实现状态机代码(state machine)的简单介绍:

  1.首先,找出所有的状态。

  2.接下来,创建一个实例变量来持有目前的状态,然后定义每个状态的值。

  3.之后,将系统中所有可以发生的动作整合起来。

  4.创建类代码,对每一个动作创建一个方法,在方法中利用条件语句来决定不同状态的行为,有可能发生的动作或者状态转换。

 

  这一版的程序特点:

  设计周密,每一个方法中都对各个状态进行了判断。

  但是需求变更时更改代码会比较困难,首先,要加上新的状态,然后必须在每个方法中加上新的条件判断,有的状态逻辑还可能会被打乱重新整理,也就是说,未来加入的代码很有可能导致bug。

 

新的设计

  要得到一个容易维护的设计,我们要做的事情是:

  1.首先,定义一个State接口,在这个接口内,糖果机的每个动作都有一个对应的方法。

  2.然后为机器中的每个状态实现状态类,每个状态类都实现State接口。这些类将负责在对应的状态下进行机器的行为。

  3.最后,我们要摆脱旧的条件代码,取而代之的方法是,将动作委托到状态类。

 

  即现在我们要把一个状态的所有行为放在一个类中,这么一来我们将行为局部化了,并使得事情更容易改变和理解。

  重新改造糖果机,把原来使用整数代表的状态改为状态对象;之后糖果机中的所有动作变得很容易实现了,只需要委托到当前状态的相应动作就可以了。机器的当前状态总是这些类的实例之一。

  实现细节:需要把对机器的引用通过构造方法传入每一个状态类中,这样每一个状态类都持有一个对机器的引用,可以调用其setState(State state)方法来进行状态的切换。

 

状态模式的定义

  状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

  这个模式将状态封装成独立的类,并将动作委托到代表当前状态的对象,这就是说行为会随着内部状态而改变

  “看起来好像修改了它的类”是什么意思呢?从客户的视角来看:如果说你使用的对象能够完全改变它的行为,那么你会觉得,这个对象实际上是从别的类实例化而来的。

  然而,实际上,你知道我们是在使用组合通过简单引用不同的状态对象来造成类改变的假象

 

状态模式的类图

 

 

 

 

 

 

策略模式和状态模式

  这两个模式的类图是类似的,它们的差别在于它们的意图。

  策略模式是围绕可以互换的算法来创建成功业务的,而状态模式通过改变对象内部的状态来帮助对象控制自己的行为。

  策略模式中,客户通常主动指定Context所要组合的策略对象时哪一个。

  策略模式让我们具有弹性,能够在运行时改变策略,但对于某个context对象来说,通常都只有一个最适当的策略对象。

 

  状态模式中,我们将一群行为封装在状态对象中,context的行为随时可以委托到那些状态对象中的一个。

  随着时间的流逝,当前状态在状态对象集合中游走改变,以反映出context内部的状态,因此,context的行为也会跟着改变。

  但是context的客户对于状态对象了解不多,甚至根本是浑然不觉。

 

  一般来说,我们把策略模式想成是除了继承之外的一种弹性替代方案。如果你使用继承定义了一个类的行为,你将被这个行为困住,甚至要修改它都很难。

  有了策略模式,你可以通过组合不同的对象来改变行为。

  我们把状态模式想成是不用在context中放置许多条件判断的替代方案。

  通过将行为包装进状态对象中,你可以通过在context内简单地改变状态对象来改变context的行为。

转载于:https://www.cnblogs.com/mengdd/archive/2013/05/05/3061632.html

http://www.lbrq.cn/news/2628685.html

相关文章:

  • 常州企业网站建设价格seo是什么姓
  • 做汽车新闻哪个网站好网推项目平台
  • 旅游门户网站源码怎么做的软文优化
  • 公司网站建设设计软文写手接单平台
  • 广告网站设计公司 作用外贸推广平台排名
  • 做投资的网站久久seo综合查询
  • 焦作市建设银行网站谷歌收录查询工具
  • 平顶山河南网站建设简述什么是网络营销
  • 广州上宏网站建设如何建立网站
  • 电话网络营销是什么上海高玩seo
  • 网络规划与设计需求分析学seo需要多久
  • bootstrap风格网站seo最新
  • 做网站图片太大好吗seo的定义
  • 便捷的大连网站建设123网址之家
  • 最新永久4虎最新人口谷歌优化技巧
  • 17做网站广州起做网店让百度收录自己的网站
  • 沧州网站建设推广凡科网站建站教程
  • 外贸soho怎么建网站二十条优化
  • 手机上怎么制作网站吗windows优化大师会员兑换码
  • 网站怎么做劫持老域名购买
  • 万网注册域名的步骤深圳网站搜索优化工具
  • 怎么在.Net中做团购网站北京做的好的seo公司
  • 北京网站建设手机app电子商务女装标题优化关键词
  • 深圳网页开发快速排名优化
  • 有谁有做卫生纸巾的网站东莞seo关键词排名优化排名
  • 56网站可以做电子相册贴吧推广400一个月
  • 万众城网站建设成都百度推广公司联系电话
  • 网站公安备案 查询百度知道合伙人官网登录入口
  • 怎么给网站做关键词足球进球排行榜
  • 怎么做网站解析什么平台发广告最有效
  • jetson上使用opencv的gstreamer进行MIPI和USB摄像头的连接以及udp推流
  • yolov1-v3原理解析
  • 笔试——Day30
  • Leetcode-2080区间内查询数字的频率
  • 漏洞分析:90分钟安全革命
  • 蓝桥杯----AT24C02