美文网首页
状态模式VS策略模式

状态模式VS策略模式

作者: 今有所思 | 来源:发表于2017-03-13 09:50 被阅读57次

选自GitHub

  • 策略模式封装的是不同的算法,算法之间没有交互、以达到算法可以自由切换的目的;
  • 状态模式封装的是不同的状态,以达到状态切换行为随之发生改变的目的。这两个模式虽然都有变换的行为,但是两者的目标却是不同的。

最佳实践

环境角色的职责不同

两者都有一个叫做Context环境角色的类, 策略模式的环境角色只是一个委托作用,负责算法的替换;而状态模式的环境角色不仅仅是委托行为,它还具有登记状态变化的功能,与具体的状态类协作,共同完成状态切换的任务。

解决问题的重点不同

策略模式旨在解决内部算法如何改变的问题,也就是将内部算法的改变对外界的影响降低到最小程度,它保证算法可以自由切换;而状态模式旨在解决内在状态的改变而引起行为改变的问题,它的出发点是事物的状态,封装状态而暴露行为,一个对象的状态改变,从外界看就好像是行为改变。

解决问题的方法不同

策略模式只是确保算法可以自由切换,但是什么时候用什么算法它决定不了;而状态模式对外暴露的是行为,状态的变化一般由环境角色和具体状态共同完成的,也就是说状态模式封装了状态的变化而暴露了不同的行为或行为结果。

应用场景不同

策略模式是一系列平行的、可相互替换的算法封装后的结构。状态模式则要求有一系列状态发生变化的场景,它要求的是有状态且有行为的场景,也就是一个对象必须具有二维描述才能采用状态模式,如果只有状态而没有行为,则状态的变化就失去了意义。

复杂度不同

通常策略模式结构简单,扩展比较容易,而且代码也容易阅读。而状态模式通常比较复杂,因为它要从两个角色看到一个对象状态和行为的改变,也就是说它封装的是变化,要知道变化是无穷尽的,因此相对来说状态模式通常都比较复杂,涉及面很多,虽然也很容易扩展,但是一般不会进行大规模的扩展和修正。

相关文章

  • 桥接模式 VS 装饰器模式、状态模式 VS 策略模式的微妙之处

    桥接模式 VS 装饰器模式、状态模式 VS 策略模式的微妙之处 Foundations of Software E...

  • 策略模式 vs 状态模式

    自从知道了策略模式和状态模式这两个行为类的设计模式后,就一直觉得这两个模式有点难以区分。不仅 UML 类图看起来没...

  • 状态模式VS策略模式

    选自GitHub 策略模式封装的是不同的算法,算法之间没有交互、以达到算法可以自由切换的目的; 状态模式封装的是不...

  • 策略模式和状态模式

    不怕跌倒,所以飞翔 本文中知识点概述: 策略模式和状态模式的基本概念 策略模式和状态模式的区别 策略模式和状态模式...

  • 现实中的模式应用

    桥接模式 针对接口编程,就是桥接模式 策略模式 策略模式也可看作是针对接口编程 状态模式 状态模式通过 Conte...

  • 设计模式-行为模式-策略模式

    策略模式与状态模式看起来差不多,只是从概念上侧重不同。策略模式封装的是策略或算法,状态模式封装的是状态,主要区别在...

  • 《魂斗罗归来》之状态模式VS策略模式

    欢迎收看俗到掉渣的《小Y讲堂》节目,大家好,我是小Y,一个集性感毛发与才华于一身的程序猿。小Y的设计模式系列中的「...

  • 设计模式-状态模式

    介绍 状态模式和策略模式是一对双胞胎,他们都属于行为设计模式。状态模式和策略模式都是为具有多种可能情形设计的模式,...

  • 策略模式

    策略模式是行为型模式的一种,同时属于行为模式的还有:命令模式,观察者模式,状态模式和之前写的中介者模式。 策略模式...

  • 《Android源码设计模式解析和实战》状态模式

    和策略模式类似且不同;策略模式是切换不同的策略执行不同策略的统一方法;状态模式是切换不同的状态执行执行不同的方法;...

网友评论

      本文标题:状态模式VS策略模式

      本文链接:https://www.haomeiwen.com/subject/cpflmttx.html