【软件设计模式】装饰者模式应用

请为星巴克公司的饮料销售系统编写一款收费软件。星巴克中可以提供的基础饮料有咖啡、奶茶和可乐,可以选择的配料(Condiment)有布丁(Pudding)、冰激凌(IceCream)、蓝莓(BlueBerry), 客户在订购饮料时,可以在基础饮料的基础上添加任意的配料,请使用装饰者模式设计系统,要求绘制系统类图并编写代码,在测试程序中输出一杯添加了布丁和蓝莓的奶茶的价格。

UML类图:

在这里插入图片描述

Java程序代码:

抽象饮料Drinks接口

public interface Drinks {
	public int getPrice();
}

具体饮料咖啡类

public class Coffee implements Drinks{
	public Coffee() {
		System.out.println("购买了一杯咖啡(5元/杯)");
	}
	
	@Override
	public int getPrice() {
		return 5;//咖啡一杯5元
	}
}

具体饮料奶茶类

public class Milkytea implements Drinks {
	public Milkytea() {
		System.out.println("购买了一杯奶茶(6元/杯)");
	}

	@Override
	public int getPrice() {
		return 6;//奶茶一杯6元
	}
}

具体饮料可乐类

public class Cola implements Drinks {
	public Cola() {
		System.out.println("购买了一杯可乐(4元/杯)");
	}

	@Override
	public int getPrice() {
		return 4;//可乐一杯4元
	}
}

抽象装饰配料类

public abstract class Condiment implements Drinks{
	public abstract int getPrice(); 

}

具体装饰布丁类

public class Pudding extends Condiment {
	private Drinks drinks;
	public Pudding(Drinks drinks) {
		this.drinks = drinks;
		System.out.println("添加了布丁(3元/份)");
	}

	@Override
	public int getPrice() {
		return drinks.getPrice()+3;//布丁3元
	}
}

具体装饰冰激凌类

public class IceCream extends Condiment {
	private Drinks drinks;
	public IceCream(Drinks drinks) {
		this.drinks = drinks;
		System.out.println("添加了冰激凌(2元/份)");
	}

	@Override
	public int getPrice() {
		return drinks.getPrice()+2;//冰激凌2元
	}
}

具体装饰蓝莓类

public class BlueBerry extends Condiment {
	private Drinks drinks;
	public BlueBerry(Drinks drinks) {
		this.drinks = drinks;
		System.out.println("添加了蓝莓(1元/份)");
	}

	@Override
	public int getPrice() {
		return drinks.getPrice()+1;//蓝莓1元
	}
}

Client客户端

public class Client {
	public static void main(String[] args) {
		Drinks milkytea = new Milkytea();
		milkytea = new Pudding(milkytea);
		milkytea = new BlueBerry(milkytea);
		System.out.println("一杯添加了布丁和蓝莓的奶茶的价格为:" + milkytea.getPrice() + "元");
	}	
}
运行结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CS_木成河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值