裝飾模式的一個dome

完成裝飾模式的demo,要求:按照自己的理解完成,有註釋.

java實現代碼如下:

詳細見:https://gitee.com/AlphF/homework

1.整體結構

2.運行結果:1744D6E16AA344B89482A29CE959CC19uploading.4e448015.gif轉存失敗重新上傳取消

3.部分重點類代碼展示

  • 3.1 測試類:Decorator
package homewordTao;
import homewordTao.coffee.MeiShi;
import homewordTao.coffee.Moka;
import homewordTao.coffee.Zuoliao.Mocha;
import homewordTao.coffee.Zuoliao.XiangCao;
import homewordTao.coffee.abstract1.Coffee;
 
/**
 * @author jiangfeng 2018/7/25 16:36
 */
public class Decorator {
   /**
    * 公司樓下的咖啡吧出售有各種咖啡, 咖啡中可以加不同的配料–摩卡、牛奶、糖、奶泡;或者風味咖啡加香草和抹茶.
    *
    *  咖啡種類小知識
    * [濃縮咖啡]  咖啡鼻祖,是一種具有強烈口感的咖啡類型,發明及發展於意大利. 咖啡的風味濃縮後,口感尤爲強烈.濃縮咖啡常作爲其他風味調製咖啡的基礎,如摩卡,拿鐵,瑪奇朵等
    * [美式咖啡]  就是加了水的意式濃縮
    * [卡布奇諾] 是三分之一濃縮咖啡,三分之一蒸汽牛奶和三分之一泡沫牛奶,卡布奇諾是一種泡沫咖啡.
    * [馬琪雅朵] 在濃縮中加上兩大勺綿密的奶泡就做好了一杯馬琪雅朵.
    * [拿鐵咖啡] 是由一小杯濃縮和一杯牛奶製作而成,比卡布奇諾多了鮮奶味道,味道也更香醇。
    * [摩卡咖啡] 摩卡通常是由三分之一的意式濃縮和三分之二的奶泡配成,再加入少許巧克力,通常會以巧克力糖漿加入)因爲有巧克力和牛奶的關係,摩卡的味道稍甜
    * [白咖啡]   白咖啡採用特級脫脂奶精原料將咖啡的苦酸和咖啡因含量降到最低,不傷胃,口感絲滑,香濃,不帶一絲苦澀。
    */
   public static void main(String[] args) {
      // 1. 美式加抹茶
   Coffee coffee = new MeiShi();
      System.out.println(coffee.getDesc()+" 價格:"+coffee.price());
      coffee = new Mocha(coffee);
 
      System.out.println(coffee.getDesc()+" 價格:"+coffee.price());
 
      // 2.摩卡加抹茶加香草
   Coffee coffee2 = new Moka();
      System.out.println(coffee2.getDesc()+" 價格:"+coffee2.price());
      coffee2 = new Mocha(coffee2);
      coffee2 = new XiangCao(coffee2);
      System.out.println(coffee2.getDesc()+" 價格:"+coffee2.price());
   }
}
  • 3.2 抽象父類: Coffee
package homewordTao.coffee.abstract1;
 
/**
 * @author jiangfeng 2018/7/25 17:41
 * 父類咖啡
 */
public abstract class Coffee {
   public String desc = "我是咖啡鼻祖:意式濃縮咖啡!";
 
   public String getDesc() {
      return desc;
   }
   public abstract double price();
 
}
  • 3.3 子類:美式咖啡
package homewordTao.coffee;
 
import homewordTao.coffee.abstract1.Coffee;
 
/**
 * @author jiangfeng 2018/7/25 18:10
 * 子類美式咖啡,繼承抽象父類咖啡
 */
public class MeiShi  extends Coffee {
   public MeiShi() {
      desc = "美式";
   }
 
   @Override
   public double price() {
      return 20.00d;
   }
}
 
  • 3.4 子類:香草
package homewordTao.coffee.Zuoliao;
 
import homewordTao.coffee.abstract1.Coffee;
import homewordTao.coffee.abstract1.Zuoliao;
 
/**
 * @author jiangfeng 2018/7/25 18:28
 * 子類香草,繼承抽象父類佐料
 */
public class XiangCao extends Zuoliao {
   private Coffee coffee;
   public XiangCao(Coffee coffee){
      this.coffee = coffee;
   }
 
   @Override
   public String getDesc() {
      return coffee.getDesc() + ", 加香草";
   }
 
   @Override
   public double price() {
      return coffee.price() + 6;
   }
}

 

 

4.裝飾器模式和代理模式的區別

裝飾器模式是使用的調用者從外部傳入的被裝飾對象(coffee),調用者只想要你把他給你的對象裝飾(加強)一下。而代理模式使用的是代理對象在自己的構造方法裏面new的一個被代理的對象,不是調用者傳入的。調用者不知道你找了其他人,他也不關心這些事,只要你把事情做對了即可

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章