策略模式,状态模式

a 夏天 提交于 2019-12-02 20:19:15

【own】策略模式和状态模式,都是提取动态行为,解耦;if else 系列

策略模式:

     在不确定具体行为,提取动态行为,便于后期维护;由于不确定具体的行为,所以行为对象会很多,不利于对象维护;

使用场景:

假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站可能对所有的高级会员提供每本20%的促销折扣;对中级会员提供每本10%的促销折扣;对初级会员没有折扣。

  根据描述,折扣是根据以下的几个算法中的一个进行的:

  算法一:对初级会员没有折扣。

  算法二:对中级会员提供10%的促销折扣。

  算法三:对高级会员提供20%的促销折扣。

 

状态模式:

      确定具体有几个状态,提取动态行为,不同状态有不同状态;

使用场景:

 考虑一个在线投票系统的应用,要实现控制同一个用户只能投一票,如果一个用户反复投票,而且投票次数超过5次,则判定为恶意刷票,要取消该用户投票的资格,当然同时也要取消他所投的票;如果一个用户的投票次数超过8次,将进入黑名单,禁止再登录和使用系统。

  要使用状态模式实现,首先需要把投票过程的各种状态定义出来,根据以上描述大致分为四种状态:正常投票、反复投票、恶意刷票、进入黑名单。然后创建一个投票管理对象(相当于Context)。

 

 

状态模式与策略模式涉及到的角色:

●  环境(Context)角色【用于组装对象】:持有一个Strategy的引用。

●  抽象策略(Strategy)角色【面向抽象编程】:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。

●  具体策略(ConcreteStrategy)角色【根据客户端选择】:包装了相关的算法或行为。

    

 

    

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!