zoukankan      html  css  js  c++  java
  • 策略模式

    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();
    	}
    }
    

    输出结果

  • 相关阅读:
    Lc5413_重新排列句子中的单词
    Lc5412._在既定时间做作业的学生人数
    Lc520_检测大写字母
    threadPoolExecutor的参数和拒绝策略
    coutdownlatch的使用
    volatile的个人理解
    Lc292_Nim 游戏
    Lc136_只出现一次的数字
    lc88_合并两个有序数组
    jdk源码_String(1)
  • 原文地址:https://www.cnblogs.com/pycrab/p/8906462.html
Copyright © 2011-2022 走看看