专栏首页用户5325874的专栏常用设计模式——装饰模式

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

装饰者模式

概念

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

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

缺点

容易引入大量小类

示例

/**
 * 饮料
 * @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());
    }

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 常用设计模式——复合模式

    视图:用来呈现模型。视图通常直接从模型中取得它需要显示的状态和数据。视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,像面板、框架和按钮。

    用户5325874
  • 常用设计模式——命令模式

    将"请求"封装成对象,以便使用不同的请求、队列、或者日志来参数化其他对象(就是命令对象拥有相同的接口,不同的命令对象可以被设置到调用者中)。命令模式也可以支持撤...

    用户5325874
  • 常用设计模式——迭代器模式

    用户5325874
  • 策略模式——运筹帷幄

    三国情景再现: 诸葛亮在刘备去东吴招亲之前,特授予伴郎赵云三个锦囊,说是按天机拆开解决棘手问题。

    100000860378
  • 设计模式-里氏替换

    先来看个最正宗的定义 如果对每一个类型为S的对象o1,都有类型为T的对 象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变 ...

    yiduwangkai
  • 设计模式-装饰者模式

    用户5927264
  • 设计模式 接口隔离原则

    接着,要进行更改了。对好看的定义,发生了改变,那么就应该改变PettyGirl中的内容,但是已经在接口中定义了。那么就有问题了。即,接口承担的内容过多导致

    mySoul
  • 初探Java设计模式2:结构型模式(代理模式,适配器模式等)

    转自https://javadoop.com/post/design-pattern

    Java技术江湖
  • 自定义注解与常用设计模式

    注解分为:内置注解,自定义注解。内置注解就是JDK 自带的,而自定义注解则是自己定义的比如许多框架(spring) 用到的

    斯文的程序
  • 第76节:Java中的基础知识

    设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat

    达达前端

扫码关注云+社区

领取腾讯云代金券