【own】策略模式和状态模式,都是提取动态行为,解耦;if else 系列
策略模式:
在不确定具体行为,提取动态行为,便于后期维护;由于不确定具体的行为,所以行为对象会很多,不利于对象维护;
使用场景:
假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站可能对所有的高级会员提供每本20%的促销折扣;对中级会员提供每本10%的促销折扣;对初级会员没有折扣。
根据描述,折扣是根据以下的几个算法中的一个进行的:
算法一:对初级会员没有折扣。
算法二:对中级会员提供10%的促销折扣。
算法三:对高级会员提供20%的促销折扣。
状态模式:
确定具体有几个状态,提取动态行为,不同状态有不同状态;
使用场景:
考虑一个在线投票系统的应用,要实现控制同一个用户只能投一票,如果一个用户反复投票,而且投票次数超过5次,则判定为恶意刷票,要取消该用户投票的资格,当然同时也要取消他所投的票;如果一个用户的投票次数超过8次,将进入黑名单,禁止再登录和使用系统。
要使用状态模式实现,首先需要把投票过程的各种状态定义出来,根据以上描述大致分为四种状态:正常投票、反复投票、恶意刷票、进入黑名单。然后创建一个投票管理对象(相当于Context)。
状态模式与策略模式涉及到的角色:
● 环境(Context)角色【用于组装对象】:持有一个Strategy的引用。
● 抽象策略(Strategy)角色【面向抽象编程】:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
● 具体策略(ConcreteStrategy)角色【根据客户端选择】:包装了相关的算法或行为。
来源:oschina
链接:https://my.oschina.net/u/2447363/blog/795085