策略模式

Strategy Pattern

  1. 定义策略模式定义了算法族(实现同一个接口),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
  2. 场景实现一个功能有多种策略(算法),我们可以根据环境或者条件来选择一个。
  3. 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();
}
}

输出结果

posted @   bkycrab  阅读(269)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示