策略模式和状态模式

状态模式

  • 状态模式

当一个对象的内在状态改变时允许改变其行为, 这个对象看起来像是改变了其类.

状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况. 把状态的判断逻辑转移到表示不同状态的一系列类当中, 可以把复杂的判断逻辑简化

如果这个状态判断很简单,那就没必要用状态模式

状态模式使用一个对象可以在不同的状态下表现出不同的行为。

  • 状态的使用:
  • 比如表示一个人在一天不同时刻的工作内容.

策略模式

  • 策略模式

它定义了算法家族, 分别封装起来, 让它们之间可以相互替换, 此模式让算法的变化, 不会影响到使用算法的客户.

不同的策略都是完成相同的工作, 只是实现不同, 它可以以相同的方式调用所有的算法, 减少了各种算法类与使用算法类之间的耦合.

可以和工厂方法配合使用.

策略模式是对一组相关的算法进行封装,给调用方提供了运行时的灵活性

  • 策略的使用
    • 策略:商场的促销时不同的打折算法.可以看到这里的打折算法是可以相互替换的.

对比

  • 状态模式可以帮助对象来管理它的状态
  • 策略模式使得客户端可以选择不同的行为。
  • 一个不太容易看到的区别是,谁去驱动行为的改变。
  • 在策略模式中,是客户端驱动的,它给上下文信息提供了不同的策略
  • 在状态模式中,状态的迁移是由Context或者State对象自己来管理的
  • 从理论上说,策略模式和状态模式还有一个不同,前者定义的是一个对象“如何”去做一件事情,比如说如何对数据进行排序,而另一方面,状态模式定义的是“什么”以及“何时“,比如说一个对象能做什么,某个时间点它处于哪个状态。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 报价管理## 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的...
    七寸知架构阅读 5,126评论 9 62
  • 1 场景问题 1.1 报价管理 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的客户要...
    4e70992f13e7阅读 3,107评论 2 16
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 3,961评论 1 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139
  • 书籍:kindle看的PDF电子书 《青蛙变王子》 作者:NLP创始人 约翰•歌德瑞 查理•班德勒 作者歌德瑞研究...
    24K超超老师阅读 5,214评论 0 4