设计模式代码实战-装饰者模式

本文介绍如何使用Java中的装饰者模式为黑咖啡和拿铁添加不同调料(如牛奶和糖),通过创建抽象类和具体装饰类实现动态功能添加。
摘要由CSDN通过智能技术生成

1、问题描述

小明喜欢品尝不同口味的咖啡,他发现每种咖啡都可以加入不同的调料,比如牛奶、糖和巧克力。他决定使用装饰者模式制作自己喜欢的咖啡。
请设计一个简单的咖啡制作系统,使用装饰者模式为咖啡添加不同的调料。系统支持两种咖啡类型:黑咖啡(Black Coffee)和拿铁(Latte)。

输入描述
多行输入,每行包含两个数字。第一个数字表示咖啡的选择(1 表示黑咖啡,2 表示拿铁),第二个数字表示要添加的调料类型(1 表示牛奶,2 表示糖)。

输入示例
1 1
2 2

输出示例
Brewing Black Coffee
Adding Milk
Brewing Latte
Adding Sugar

2、装饰者模式

装饰模式可以在不定义⼦类的情况下动态的给对象添加⼀些额外的功能。具体的做法是装饰类包含原始对象的引用,为原始对象动态添加新的⾏为,⽽⽆需修改其代码
请添加图片描述

3、代码

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);



        for(int i=0;sc.hasNextInt();i++){

            int t=sc.nextInt();
            int add=sc.nextInt();
            if(t==1){
                Coffee c=new BlackCoffee();
                ConcreteDecorate cD=new ConcreteDecorate(c);
                cD.display(add);
            }else if(t==2){
                Coffee c=new Latte();
                ConcreteDecorate cD=new ConcreteDecorate(c);
                cD.display(add);
            }



        }
    }
}
interface Coffee{
    void display(int tag);
}

class BlackCoffee implements Coffee{

    @Override
    public void display(int tag) {
        System.out.println("Brewing Black Coffee");
    }
}

class Latte implements Coffee{
    @Override
    public void display(int tag) {
        System.out.println("Brewing Latte");
    }
}
abstract  class Decorate implements Coffee{
    private  Coffee coffee;
    public Decorate(Coffee c){
        this.coffee=c;
    }
    @Override
    public void display(int tag) {
       coffee.display(tag);
    }
}

class ConcreteDecorate extends Decorate{

    public ConcreteDecorate(Coffee c) {
        super(c);
    }
    @Override
    public void display(int tag) {
       super.display(tag);
       if (tag==2){
           System.out.println("Adding Sugar");
       }else if(tag==1){
           System.out.println("Adding Milk");
       }

    }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值