无废话设计模式(13)行为型模式--策略模式
0-前言
策略模式定义:定义了算法家族,分别封装起来,让他们之间可以相互替换,
此模式让算法的变化,不会影响到使用算法的客户;
1-实现
1-1、简单UML图:
1-2、代码实现:
//1、抽象父类 abstract class Discount { abstract double GetDiscount(); } //2-1、具体算法A class DiscountA extends Discount { @Override double GetDiscount() { return 5; } } //2-2、具体算法B class DiscountB extends Discount { @Override double GetDiscount() { return 10; } } //3、上下文类 class DiscountContext { Discount discount; public DiscountContext(int type) { switch (type) { case 1: this.discount = new DiscountA(); break; case 2: this.discount = new DiscountB(); break; default: this.discount = new DiscountA(); break; } } public double getAllDicount() { return discount.GetDiscount(); } }
客户端:
double discount; DiscountContext discountContext; discountContext = new DiscountContext(1); discount = discountContext.getAllDicount(); System.out.println("算法A下,你当前可以享受的优惠金额为:" + discount); discountContext = new DiscountContext(2); discount = discountContext.getAllDicount(); System.out.println("算法B下,你当前可以享受的优惠金额为:" + discount);
运行结果:
2-应用场景简单总结
1、很多相关类(算法)只是在行为上有差异;
2、当需要使用一个算法的不同变体时;
3、使用算法的用户不应只算法的具体结构时;