首页 > 其他 > 详细

HeadFirst设计模式---装饰者

时间:2019-11-28 01:30:44      阅读:80      评论:0      收藏:0      [点我收藏+]

定义装饰者模式

装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。这句话摘自书中,给人读得很生硬难懂。通俗地来说,装饰者和被装饰者有相同的父类,装饰者的行为组装着被装饰者的行为。

设计星巴克咖啡

技术分享图片

代码实现

/**
 * @author Lollipop
 * @since 2019/11/26
 */
public abstract class Beverage {
    String description = "Unknown Beverage";

    public String getDescription() {
        return description;
    }

    public abstract double cost();

}
/**
 * @author Lollipop
 * @since 2019/11/26
 */
public abstract class CondimentDecorator extends Beverage {
    /**
     * 描述
     * @return
     */
 @Override
 public abstract String getDescription();
}
/**
 * @author Lollipop
 * @since 2019/11/26
 */
public class Mocha extends CondimentDecorator {
    private Beverage beverage;

    public Mocha(Beverage beverage) {
        this.beverage = beverage;
    }

    /**
     * 描述
     *
     * @return
     */
    @Override
    public String getDescription() {
        return "Mocha," + this.beverage.getDescription();
    }

    @Override
    public double cost() {
        return 0.20 + this.beverage.cost();
    }
}
/**
 * @author Lollipop
 * @since 2019/11/26
 */
public class Whip extends CondimentDecorator {
    private Beverage beverage;

    public Whip(Beverage beverage) {
        this.beverage = beverage;
    }

    /**
     * 描述
     *
     * @return
     */
    @Override
    public String getDescription() {
        return "Whip," + this.beverage.getDescription();
    }

    @Override
    public double cost() {
        return 0.10 + this.beverage.cost();
    }
}

代码运行

/**
 * @author Lollipop
 * @since 2019/11/26
 */
public class StarbuzzCoffee {
    public static void main(String[] args) {
        Beverage beverage = new Espress();
        beverage = new Mocha(beverage);
        beverage = new Mocha(beverage);
        beverage = new Whip(beverage);
        System.out.println(beverage.getDescription() + " $" + beverage.cost());
    }
}

运行结果

Whip,Mocha,Mocha,Unknown Beverage $1.59

总结

  1. 装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的。
  2. 多重嵌套,导致代码复杂度高

HeadFirst设计模式---装饰者

原文:https://www.cnblogs.com/Lollipop_Hsu/p/11946268.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!