设计模式——装饰者模式 Java源代码

本文介绍了装饰者模式在Java中的应用,通过类图和源代码展示了如何使用装饰者模式来动态地增加对象的功能。文章以食堂打菜为例,详细解释了装饰者模式的角色和工作原理,以及如何避免类爆炸问题,强调了继承和组合在模式中的关键作用,并提到了Java.IO中装饰者模式的实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装饰者模式,可以动态地把职责附加到已有的对象上面去。又称 Wrapper Pattern,在代码实现的时候,确实有“包装”的意思。

类图

装饰者
图:来自《Head First Design Patterns》

可以看出,装饰者模式里面,有4个角色:Component抽象类,ConcreteComponent具体类,Decorator抽象类,ConcreteDecorator具体类

装饰者模式
图:我的Java源代码的类图

总共10个类
一个Component抽象类
两个ConcreteComponent具体类
一个Decorator抽象类
五个ConcreteDecorator具体类
一个Main测试类

ConcreteDecorator 继承了Decorator抽象类, 组合了Component抽象类。Decorator抽象类继承了Component抽象类,这个继承的目的是:it’s vital that the decorators have the same type as the object they are going to decorate。简而言之,就是为了获得相同的类型,并不是为了获得行为。组合是为了让所有的concreteDecorator可以“互相包装、装饰”


talk is cheap, show me the code

去食堂打菜,经济套餐,假设总共只有5种食物可供选择分别是:手撕包菜,茄子豆角,麻婆豆腐,青椒肉丝,红烧里脊。

一个Component抽象类

package decorator;

public abstract class Meal
{
    String description = "Unknown Meal";

    public String getDescription()
    {
        return description;
    }

    public abstract double cost();
}

两个ConcreteComponent具体类

package decorator;

public class ChineseMeal extends Meal
{
   
    public ChineseMeal()
    {
        description = "Chinese Meal";
    }

    @Override
    public double cost()
    {
        return 1.0;        // 一次性餐具费用
    }

}
package decorator;

public class WesternMeal extends Meal
{
   
    public WesternMeal()
    {
        description = "Western meal";
    }

    @Override
    public double cost()
    {
        return 5.0;        // 不锈钢刀、叉费用
    }

}

一个Decorator抽象类

package decorator;

public abstract class Decorator extends Meal
{
   
    public abstract String getDescription();
}

五个ConcreteDecorator具体类

package
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值