java设计模式 装饰者模式 示例代码

假设有一个咖啡店,需要根据客户的订单制作不同的咖啡饮料。这些饮料可以添加不同的调料,比如牛奶、摩卡等。为了实现这个功能,我们可以使用装饰者模式。

首先,我们定义一个基本的饮料接口 Beverage,它包含了计算价格和描述的方法:

public interface Beverage {
    String getDescription();
    double cost();
}

然后,我们实现一个具体的饮料类 Espresso,它是基本的咖啡饮料,没有任何调料:

public class Espresso implements Beverage {
    public String getDescription() {
        return "Espresso";
    }
    
    public double cost() {
        return 1.99;
    }
}

现在,我们来添加一些调料。为了方便,我们定义一个抽象的调料装饰者类 CondimentDecorator,它也实现了 Beverage 接口,并包含了一个指向被装饰对象的引用

public abstract class CondimentDecorator implements Beverage {
    protected Beverage beverage;
}

然后,我们实现具体的调料装饰者类,比如牛奶、摩卡等:


public class Milk extends CondimentDecorator {
    public Milk(Beverage beverage) {
        this.beverage = beverage;
    }
    
    public String getDescription() {
        return beverage.getDescription() + ", Milk";
    }
    
    public double cost() {
        return beverage.cost() + 0.10;
    }
}

public class Mocha extends CondimentDecorator {
    public Mocha(Beverage beverage) {
        this.beverage = beverage;
    }
    
    public String getDescription() {
        return beverage.getDescription() + ", Mocha";
    }
    
    public double cost() {
        return beverage.cost() + 0.20;
    }
}

现在,我们可以创建一个具体的咖啡饮料对象 espresso,然后添加调料:

Beverage espresso = new Espresso();
espresso = new Milk(espresso);
espresso = new Mocha(espresso);

最后,我们可以调用 getDescription() 和 cost() 方法来获取咖啡饮料的描述和价格:
System.out.println(espresso.getDescription() + " $" + espresso.cost());

Espresso, Milk, Mocha $2.29
这就是一个简单的使用装饰者模式的实际项目示例代码。通过使用装饰者模式,我们可以轻松地为对象添加新的功能,而无需修改其原始实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值