策略模式
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();
	}
}
输出结果

    不为当下而战,何以颠覆未来
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号