0-前言
策略模式定义:定义了算法家族,分别封装起来,让他们之间可以相互替换,
此模式让算法的变化,不会影响到使用算法的客户;
1-实现
1-1、简单UML图:
1-2、代码实现:
//1、抽象父类abstract class Discount{ abstract double GetDiscount();}//2-1、具体算法Aclass DiscountA extends Discount{ @Override double GetDiscount() { return 5; }}//2-2、具体算法Bclass 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、使用算法的用户不应只算法的具体结构时;
无废话设计模式(13)行为型模式OCEANUS卖家助手使用指南、 upc、 cima、 免费谷歌爬虫抓取排名插件Web Scraber、 外贸小企业能做品牌吗?做了是不是很难存活?、 自用店铺亚马逊关联申诉模板(已成功),可以参考、 西涌海滩漂亮吗?中秋节去西涌海滩怎么样?、 南澳怎么去西冲?南澳到西冲怎么去?、 怎么买连号的动车票?自动售票那里连着买就是连号吗?、
没有评论:
发表评论