装饰模式的一个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的一个被代理的对象,不是调用者传入的。调用者不知道你找了其他人,他也不关心这些事,只要你把事情做对了即可

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值