Atitit. 状态模式(State)attilax 总结 跟个策 略模式的区别

1. 状态模式(State)概览 1

2. 状态的维护和转换:① 在Context 中。② 在状态的处理类中。2

3. 状态模式和策略模式的比较  2

1. 状态模式(State)概览

Context :环境,也称为上下文,用来定义客户感兴趣的接口,同时维护一个具体处理当前状态的实例对象。

State:状态接口,用来封装与上下文的一个特定状态所对应的行为。

ConcreteState:具体实现状态的处理类,每个实现一个跟上下文相关联的状态的具体处理。

作者::老哇的爪子Attilax艾龙,EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

2. 状态的维护和转换:① 在Context 中。② 在状态的处理类中。

维护状态的数据,给状态设置不同的状态值;状态的转换,指的是根据状态的变化来选择不同的状态处理对象。

有两个地方可以进行状态的维护和转换:

① 在Context 中。② 在状态的处理类中。

如何选择者两种方式:

● 如果状态转换的规则是一定的,一般不需要进行什么扩展规则,那么就适合在上下文中统一进行状态的维护。

● 如果状态的转换取决于前一个状态动态处理的结果,或者是依赖外部数据,为了增强灵活性,这种情况下,一般式在状态处理类中进行状态的维护。

 从上面可以看出,环境类Context的行为request()是委派给某一个具体状态类的。通过使用多态性原则,可以动态改变环境类Context的 属性State的内容,使其从指向一个具体状态类变换到指向另一个具体状态类,从而使环境类的行为request()由不同的具体状态类来执行。

3. 状态模式和策略模式的比较

策 略模式的类图和状态模式的类图实现是很相似的,这也是为什么设计模式中,我们把这两种模式比喻成为孪生兄弟,很多时候,我们在运用上述模式来解决实际问题 的时候,也经常混淆他们,其实,个人倒是认为,就算大家用法不同其实也没有必要介意,因为设计模式的应用是紧贴着设计原则来走的,不论是状态模式,还是策 略模式,我们都是紧紧的遵守着开闭原则,里氏代换原则,和迪米特原则,充分的面向接口编程,利用封装特性;策略模式主要是考虑到当我们要增加新的算法策略 的时候,如何能在最小代价下面实现增加,最典型的应用就是莫过于在超市商场的“多样的”打折算法下面,

状态模式(state pattern)和策略模式(strategy pattern)的实现方法非常类似,都是利用多态把一些操作分配到一组相关的简单的类中,因此很多人认为这两种模式实际上是相同的。然而

· 在现实世界中,策略(如促销一种商品的策略)和状态(如同一个按钮来控制一个电梯的状态,又如手机界面中一个按钮来控制手机)是两种完全 不同的思想。当我们对状态和策略进行建模时,这种差异会导致完全不同的问题。例如,对状态进行建模时,状态迁移是一个核心内容;然而,在选择策略时,迁移 与此毫无关系。另外,策略模式允许一个客户选择或提供一种策略,而这种思想在状态模式中完全没有。

在状态模式中,状态的变迁是由对象的内部条件决定,外界只需关心其接口,不必关心其状态对象的创建和转化;而策略模式里,采取何种策略由外部条件(C)决定。

区别在于,策略模式中需要客户端传入具体的策略对象,然后由context这个控制类来提供服务。而状态模式则是由客户端传入状态标记,由context判断并切换到符合条件的状态对象。

参考

Java 设计模式 之 状态模式(State) - 低调的华丽的日志 - 网易博客.htm

状态模式和策略模式的比较 - Mainz - 博客园.htm

Atitit. 状态模式(State)attilax 总结 跟个策 略模式的区别相关推荐

  1. 设计模式之状态模式(State)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  2. 设计模式的理解:状态模式(State) 和备忘录模式(Memento)

    一.状态模式 状态模式,允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类.它的实现方式和策略模式相似,目的都是对if...else语句进行优化,只不过,策略模式通过外部传入枚举.条 ...

  3. php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)

    状态模式 (State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类.其别名为状态对象(Objects for States) (一)为什么需要状态模式 ...

  4. c++状态模式state

    c++状态模式state 概念 角色和职责 案例 概念 State模式也叫状态模式,是行为设计模式的一种.State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样 ...

  5. 【转】设计模式 ( 十七) 状态模式State(对象行为型)

    设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...

  6. C++设计模式之状态模式(state)(行为型)

    一 定义 状态模式:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类. 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况.把不同状态的操作分散到不同的状态对象 ...

  7. 状态模式(State)-七十二变

    状态模式(State)-老孙七十二变 俺老孙来也-我是如来佛祖玉皇大帝观音菩萨指定取西经特派使者花果山水帘洞美猴王齐天大圣孙悟空啊!老孙的必杀技就是七十二变,没错比老外的变相怪杰还有牛逼许多. 关于老 ...

  8. 趣谈设计模式 | 状态模式(State):如何实现游戏中的状态切换?

    文章目录 案例:马里奥积分竞赛 有限状态机 分支逻辑法 查表法 状态模式 状态模式与策略模式 总结 完整代码与文档 案例:马里奥积分竞赛 喜欢马里奥的小伙伴们都应该知道,前不久马里奥为了庆祝35周年, ...

  9. 设计模式之状态模式(State)

    什么是状态? 我们在购物网站进行购物时,订单会产生几种状况:已下单.已付款.送货中.确定收货等状态. 所以系统会判断该订单的状态,不管是哪种状态都应给出对应的操作,这就是状态. 什么是状态模式? 在软 ...

  10. 极速理解设计模式系列:22.状态模式(State Pattern)

    四个角色:抽象状态类(State).具体状态类(ConcreateState).情景类(Context).客户端(Client) 抽象状态类(State):提供一个与情景类有关的State行为. 具体 ...

最新文章

  1. intellij打开工程在每个java文件上有个红色的无效符的解决办法
  2. boost::adl_move_swap相关用法的测试程序
  3. android 通过webview调起支付宝app支付
  4. Yii权限管理工具Srbac使用小结
  5. 前端学习(1603):脚手架组件使用
  6. Linux学习笔记-消息队列的接收
  7. 昨天食物中毒,至今浑身酸痛
  8. 语音自训练平台技术详解,快速训练专属语音识别模型
  9. android环信退出登录,环信退出登陆的的问题
  10. 小巧玲珑的开源调度框架Azkaban3.0下载、编译、安装及使用详细文档
  11. 1106 Lowest Price in Supply Chain(25 分)
  12. 第一章 python大数据分析概述
  13. 《免费下载论文的网站》
  14. cumsum在matlab中,matlab中cumsum函数详解
  15. 基金账户与基金交易账户
  16. Mian容器中Page分頁
  17. 【开源】发卡程序/会员/分站/三级分销/对接易码/免签支付/完美运营
  18. windows蓝牙编程—— 0 获取本地蓝牙的句柄和信息
  19. 线程有哪些状态?每个状态是什么意思?又是如何切换的?
  20. web 系统原理之路由器和交换机的区别

热门文章

  1. php模拟表单提交,php用fsockopen()函数实现模拟提交表单。
  2. 13、OSPF配置实验之LSA2
  3. 爱创课堂每日一题第三十三天- 如何评价AngularJS和BackboneJS?
  4. centos7 Samba服务安装和配置
  5. 【知云】第十期:如何保障云上游戏安全?云盾+高防IP筑起云上安全高墙
  6. Linux常用命令汇总--tree
  7. 【springmvc+mybatis项目实战】杰信商贸-14.购销合同添加+修改+删除+查看
  8. MSR系列路由器DAR功能的配置
  9. 如果有一个工具可以帮助你将你的代码可视化,你需要吗?
  10. IO库----IO类,文件输入输出,string流