Java:设计模式之结构型-装饰者模式(decorator pattern)

装饰者模式(decorator pattern): 动态地将责任附加到对象上

意图:为对象动态添加功能

类图

实现

设计不同种类的饮料,饮料可以添加配料,比如可以添加牛奶,并且支持动态添加新配料。每增加一种配料,该饮料的价格就会增加,要求计算一种饮料的价格。

项目结构

bash 复制代码
$ tree
.
├── Beverage.java                       # 接口
├── Client.java                         # 客户端调用方
└── impl
    ├── CondimentDecorator.java         # 装饰器抽象类
    ├── DarkRoast.java                  # Beverage的实现类
    ├── HouseBlend.java                 # Beverage的实现类
    ├── Milk.java                       # 装饰器抽象类的实现类
    └── Mocha.java                      # 装饰器抽象类的实现类

具体代码

java 复制代码
public interface Beverage {
    double cost();
}
java 复制代码
public class DarkRoast implements Beverage {
    @Override
    public double cost() {
        return 1;
    }
}
java 复制代码
public class HouseBlend implements Beverage {
    @Override
    public double cost() {
        return 1;
    }
}
java 复制代码
public abstract class CondimentDecorator implements Beverage {
    protected Beverage beverage;
}
java 复制代码
public class Milk extends CondimentDecorator {

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

    @Override
    public double cost() {
        return 1 + beverage.cost();
    }
}
java 复制代码
public class Mocha extends CondimentDecorator {

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

    @Override
    public double cost() {
        return 1 + beverage.cost();
    }
}
java 复制代码
public class Client {
    public static void main(String[] args) {
        Beverage beverage = new HouseBlend();
        beverage = new Mocha(beverage);
        beverage = new Milk(beverage);
        System.out.println(beverage.cost());
        // 3.0
    }
}

参考文章

  1. Java 全栈知识体系:结构型 - 装饰(Decorator)
相关推荐
BING_Algorithm1 分钟前
JDBC核心教程
java·后端·mysql
京师20万禁军教头2 分钟前
33面向对象(中级)-object类详解
java
一个小浪吴啊2 分钟前
重构 AI 编程流:基于 Hermes 记忆中枢与 OpenCode 执行终端的 Harness 工程化实践
java·人工智能·opencode·harness·hermes
Lyyaoo.7 分钟前
【JAVA网络面经】应用层协议
java·开发语言·网络
無限進步D12 分钟前
Java 面向对象高级 继承
java·开发语言
云烟成雨TD14 分钟前
Spring AI Alibaba 1.x 系列【37】ReactAgent 构建、执行流程分析
java·人工智能·spring
是宇写的啊23 分钟前
MyBaties
java·开发语言·mybatis
钝挫力PROGRAMER26 分钟前
程序中事件机制的实现
java·后端·python·软件工程
程序员威哥30 分钟前
Java调用YOLO模型性能优化实战:CPU/GPU加速与内存优化全指南
java·人工智能·后端
Xpower 1736 分钟前
OpenClaw Token 优化的技术方案与实践:OpenSpace 自进化 Skill 引擎
java·开发语言·人工智能