小胖子的Java设计模式-装饰器模式

装饰器模式(Decorator Pattern)

背景介绍:

小胖子对自己的披萨不够牛逼感到有些失望,于是决定为披萨增加一些奇特的调料,使得披萨更加美味独特。他想要在不改变原有披萨结构的基础上,动态地添加新的功能。为了实现这一愿望,小胖子决定引入装饰器模式。

设计模式应用:
装饰器模式

为了让披萨更加丰富多彩,小胖子引入了装饰器模式。他创建了一个基本披萨类,然后通过装饰器类动态地为披萨添加各种调料,比如辣椒、芝士等。

代码示例:
// 基础披萨接口
interface Pizza {
    String getDescription();

    double cost();
}

// 基础披萨类
class BasicPizza implements Pizza {
    @Override
    public String getDescription() {
        return "基础披萨";
    }

    @Override
    public double cost() {
        return 8.0;
    }
}

// 披萨装饰器抽象类
abstract class PizzaDecorator implements Pizza {
    protected Pizza decoratedPizza;

    public PizzaDecorator(Pizza decoratedPizza) {
        this.decoratedPizza = decoratedPizza;
    }

    @Override
    public String getDescription() {
        return decoratedPizza.getDescription();
    }

    @Override
    public double cost() {
        return decoratedPizza.cost();
    }
}

// 辣椒装饰器
class ChiliDecorator extends PizzaDecorator {
    public ChiliDecorator(Pizza decoratedPizza) {
        super(decoratedPizza);
    }

    @Override
    public String getDescription() {
        return super.getDescription() + " + 辣椒";
    }

    @Override
    public double cost() {
        return super.cost() + 2.0; // 加辣椒需要额外支付2元
    }
}

// 芝士装饰器
class CheeseDecorator extends PizzaDecorator {
    public CheeseDecorator(Pizza decoratedPizza) {
        super(decoratedPizza);
    }

    @Override
    public String getDescription() {
        return super.getDescription() + " + 芝士";
    }

    @Override
    public double cost() {
        return super.cost() + 3.5; // 加芝士需要额外支付3.5元
    }
}

// 客户端
public class DecoratorPatternExample {
    public static void main(String[] args) {
        // 制作基础披萨
        Pizza basicPizza = new BasicPizza();
        System.out.println("基础披萨: " + basicPizza.getDescription() + ",价格:" + basicPizza.cost() + "元");

        // 制作加辣椒的披萨
        Pizza pizzaWithChili = new ChiliDecorator(basicPizza);
        System.out.println("加辣椒的披萨: " + pizzaWithChili.getDescription() + ",价格:" + pizzaWithChili.cost() + "元");

        // 制作加芝士的披萨
        Pizza pizzaWithCheese = new CheeseDecorator(basicPizza);
        System.out.println("加芝士的披萨: " + pizzaWithCheese.getDescription() + ",价格:" + pizzaWithCheese.cost() + "元");

        // 制作既加辣椒又加芝士的披萨
        Pizza pizzaWithChiliAndCheese = new CheeseDecorator(new ChiliDecorator(basicPizza));
        System.out.println("加辣椒和芝士的披萨: " + pizzaWithChiliAndCheese.getDescription() + ",价格:" + pizzaWithChiliAndCheese.cost() + "元");
    }
}
动态添加调料

在这个例子中,装饰器模式使得小胖子可以动态地为披萨添加各种调料,而不需要改变基础披萨类的结构。通过创建不同的装饰器类,可以组合不同的调料,使得披萨更加丰富多彩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值