IO原理剖析-装饰器设计模式(2)

博客介绍了装饰器设计模式的四大组成部分,包括抽象组件、具体组件、抽象装饰类和具体装饰类。并通过Java代码模拟混合咖啡,展示了如何使用装饰器模式为咖啡添加牛奶、蔗糖等装饰,体现了该模式在实际编程中的应用。

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

*模拟混合咖啡
 *装饰器设计模式四大组成部分
 *1,抽象组件:需要装饰的抽象对象,一般是接口或者抽象父类
 *2,具体组件:需要装饰的对象
 *3,抽象装饰类:包含了对抽象组件的引用,以及装饰者共有的方法
 *4,具体的装饰类:被装饰的对象。
 *coffee实现Drink接口
 *Decorate实现Drink接口
 *Milk继承Decorate抽象类
 *Suger继承Decorate抽象类
 */
public class IOprinciple2 {
    public static void main(String[] args) {
        Drink coffee = new Coffee();
        //加入蔗糖了的咖啡
        Drink suger = new Suger(coffee);
        System.out.println("说明:"+suger.info()+"费用"+suger.cost());
        //加入牛奶了的咖啡
        Drink milk = new Milk(coffee);
        System.out.println("说明:"+milk.info()+"费用"+milk.cost());
        
        milk = new Milk(milk);
        System.out.println("说明:"+milk.info()+"费用"+milk.cost());
    }
}
//抽象组件
interface Drink{
    double cost();//费用
    String info();//说明
}
//具体组件
class Coffee implements Drink{
    private String name ="原味咖啡";
    @Override
    public double cost() {
        return 10;
    }

    @Override
    public String info() {
        return name;
    }
    
}
//抽象装饰类
abstract class Decorate implements Drink{
    //对抽象组件的引用
    private Drink drink;
    public Decorate(Drink drink) {
        this.drink = drink;
    }

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

    @Override
    public String info() {
        return this.drink.info();
    }
    
}
//具体的装饰类
class Milk extends Decorate{

    public Milk(Drink drink) {
        super(drink);
    }

    @Override
    public double cost() {
        return super.cost()*4;
    }

    @Override
    public String info() {
        return super.info()+"加入了牛奶";
    }
    
}
//具体的装饰类
class Suger extends Decorate{

    public Suger(Drink drink) {
        super(drink);
    }

    @Override
    public double cost() {
        return super.cost()*2;
    }

    @Override
    public String info() {
        return super.info()+"加入了蔗糖";
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值