前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常用设计模式——装饰模式

常用设计模式——装饰模式

作者头像
用户5325874
发布2020-04-13 18:53:25
3420
发布2020-04-13 18:53:25
举报

装饰者模式

概念

装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者模式提供了比继承更有弹性的方案

  • 装饰者与被装饰者有相同的超类型。
  • 你可以用一个或者多个装饰者包装一个对象
  • 既然装饰者与被装饰者有相同的超类型,所以可以使用装饰过的对象替换他。
  • 装饰者可以在被装饰者的行为之前/之后,加上自己的行为,已达到特定的目的
  • 对象可以在运行时被装饰

缺点

容易引入大量小类

示例

/**
 * 饮料
 * @author huangy on 2019-05-19
 */
public abstract class Beverage {

    String description = "Unknown Beverage";

    public String getDescription() {
        return description;
    }

    public abstract double cost();
}
/**
 * 调料(装饰者抽象类)
 * @author huangy on 2019-05-19
 */
public abstract class CondimentDecorator extends Beverage {

    public abstract String getDescription();
    
}
/**
 * 浓缩咖啡
 * @author huangy on 2019-05-19
 */
public class Espresso extends Beverage {

    public Espresso() {
        description = "Espresso";
    }

    @Override
    public double cost() {
        return 1.99;
    }
}
/**
 * @author huangy on 2019-05-19
 */
public class Mocha extends CondimentDecorator {

    Beverage beverage;

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

    @Override
    public String getDescription() {
        return beverage.getDescription() + ", Mocha";
    }

    @Override
    public double cost() {
        return 0.20 + beverage.cost();
    }
}
public class StarbuzzCoffee {

    public static void main(String[] args) {
        Beverage beverage = new Espresso();

        Mocha mocha = new Mocha(beverage);

        System.out.println(mocha.getDescription());

        System.out.println(mocha.cost());
    }

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 装饰者模式
    • 概念
      • 缺点
        • 示例
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档