状态模式与策略模式

状态模式与策略模式

状态(策略 )模式一般分成2类:

UML图
1. 环境类(上下文),为拥有状态的对象,一般控制状态切换
2. 状态(策略 )类:由抽象状态(策略 )类与具体状态(策略 )类组成,具体状态(策略 )类中定义了在此状态下的操作供环境类调用(统一接口)

状态模式一般流程:

通过把各已知状态建立具体状态类,然后用一个初始状态创建Context对象,然后执行request调用状态的handle(),在handle中可能会调用context的changeState()修改状态。状态变化对于使用者是透明的。

  1. 当Context接收一个状态相关的操作时,它会将方法代理给表示当前状态的ConcreteState;
  2. 当State对象需要上下文数据时,Context可以将自身作为参数传递给State的方法;
  3. Context向客户暴露接口,而State不向客户暴露;客户在初始化Context时可以配置一个State对象,但之后客户就不能再直接操作State了;
  4. 只有Context与ConcreteState才可以决定在什么样的情况下,状态能变成什么样子。
    使用State模式可以很清晰地划分不同行为模式。因为ConcreteState的存在,使得新出现的状态更易添加。第二,使用State模式使得对象状态的变迁更加清晰。最后,如果State对象没有实例相关的内部属性,则不同Context之间可以共享State对象(使用Flyweight模式)。

策略模式一般流程:

与状态类相同从抽象策略类派生出具体策略类,然后由客户选择要使用的策略,载入Context,然后使用。策略的使用由客户选择,不透明

  1. Strategy与Context进行交互,以实现算法的选择;当特定算法被调用时,Context可以传递其所需的数据过去;当然,Context也可以把自己作为参数传递过去(这可以实现Strategy对Context的回调);
  2. Context会直接传递客户的调用给Strategy对象;客户往往执行ConcreteStrategy对象的创建,以及对Context的配置;然后客户只与Context进行交互;客户经常会有一组ConcreteStrategy来选择。
    使用Strategy模式可以有效组织相关算法,并且使新算法的添加更加容易。另外一点,对于面向对象编程尤为重要的是,通过Strategy算法可以大大降低条件判断语句(if-else、switch等)出现的情况。第三,使用Strategy模式时,客户必须知道不同算法的存在。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫无之紫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值