Strategy Pattern
定义
策略模式定义了算法族(实现同一个接口),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。场景
实现一个功能有多种策略(算法),我们可以根据环境或者条件来选择一个。OO原则
- 封装变化的部分,把变化的部分独立出来不影响不变的部分,使系统更有弹性
- 多用组合,少用继承
- 针对接口编程,不针对实现编程
示例场景
某宝通过蚂蚁积分升级会员,大众会员具有最基本的特权,升级为黄金会员,铂金会员,钻石会员后有对应的特权。
类图
示例代码
环境Context类
public class Vip {
//将会员特权委托(delegate)给接口的对象处理
public Privilege privilege;
public void performPrivilege() {
privilege.display();
}
//运行时动态指定行为
public void setPrivilege(Privilege privilege) {
this.privilege = privilege;
}
public void basic() {
System.out.println("fundamental rights");
}
}
抽象策略类
public interface Privilege {
public void display();
}
具体策略类
public class BasicMember implements Privilege {
@Override
public void display() {
System.out.println("i'm common");
}
}
测试类
public class Test extends Vip{
public Test() {
//默认大众会员
privilege = new BasicMember();
}
public static void main(String[] args) {
Vip vip = new Test();
vip.basic();
vip.performPrivilege();
vip.setPrivilege(new GoldMember());
vip.performPrivilege();
}
}
输出结果