策略模式

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 @ 2018-04-22 14:02  bkycrab  阅读(267)  评论(0编辑  收藏  举报