我们先来了解一下策略模式的概念
定义:
- 策略模式定义了一系列的算法,并将每一个算法封装起来,使每个算法可以相互替代,使算法本身和使用算法的客户端分割开来,相互独立
结构:
-
策略接口角色IStrategy:用来约束一系列具体的策略算法,策略上下文角色ConcreteStrategy使用此策略接口来调用具体的策略所实现的算法。
-
具体策略实现角色ConcreteStrategy:具体的策略实现,即具体的算法实现。
-
策略上下文角色StrategyContext:策略上下文,负责和具体的策略实现交互,通常策略上下文对象会持有一个真正的策略实现对象,策略上下文还可以让具体的策略实现从其中获取相关数据,回调策略上下文对象的方法。
我们再来分析一下平时的业务场景中,有什么场景可以用到我们的策略模式
首先举一个用烂了的例子某商城项目的会员,针对某件商品,不同会员等级有不同会员的处理方式,比如普通会员无折扣,青铜会员满100-10,白银会员打八折,黄金会员打八折且满100-20,需求几乎没有重合性只能依据类型判断.
第二个例子,众所周知每个提供翻译功能的平台基本都会有一些免费的额度,比如百度翻译,有道翻译等等如果我们想白嫖这些翻译的时间,就要根据不同家的文档去实现不同的翻译接口.
上面两个例子在普通的代码中基本就是
//伪代码
public void discount(int userType){
if(userType==黄金会员){
//do sth
}else if(userType==白银会员){
//do sth
}else if(...)
}
每加一个会员等级 都会对应一个if-else如果会员等级躲起来或者增加了新的折