2020年8月3日星期一

无废话设计模式(13)行为型模式

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卖家助手使用指南upccima免费谷歌爬虫抓取排名插件Web Scraber外贸小企业能做品牌吗?做了是不是很难存活?自用店铺亚马逊关联申诉模板(已成功),可以参考西涌海滩漂亮吗?中秋节去西涌海滩怎么样?南澳怎么去西冲?南澳到西冲怎么去?怎么买连号的动车票?自动售票那里连着买就是连号吗?

没有评论:

发表评论