有关装饰者模式的两三事

举例:
蛋糕店 能够生产格式各样的蛋糕
蛋糕分为 三种 : 奶油蛋糕 ,巧克力蛋糕, 冰淇淋蛋糕
然后再上面可以添加 鲜花 水果 贺卡 干果 饼干…
不同的人可以定做不同的蛋糕,有不同的选项
蛋糕店用不用将所有选项的排列组合的蛋糕都准备一遍???没有必要!!!
蛋糕制作接口:

 abstract class Cake{
	 public abstract void make(); 
 }

选择口味:

 class ChocklateCake extends Cake{
	public void make() {
		System.out.println("制作了一个巧克力蛋糕");
	}	 
 }
 class CreamCake extends Cake{
	public void make() {
		System.out.println("制作了一个奶油蛋糕");
	}		 
}
 class IcecreamCake extends Cake{
	public void make() {
		System.out.println("制作了一个冰淇淋蛋糕");
	}		 
}

添加饰品:

class CardDecorator extends Decorator{

	public CardDecorator(Cake cake) {
		super(cake);
		
	}
	public void make(){
		super.make();
		System.out.println("放入一张card");
	}
 }
 class FruitDecorator extends Decorator{

	public FruitDecorator(Cake cake) {
		super(cake);
	}
	public void make(){
		super.make();
		System.out.println("放上一点水果");
	}
 }
 class NutDecorator extends Decorator{

	public NutDecorator(Cake cake) {
		super(cake);
	}
	public void make(){
		super.make();
		System.out.println("放上一点干果");
	}
 }

测试代码:

public static void main(String[] args) {
		Cake cake=new ChocklateCake();
		FruitDecorator fd=new FruitDecorator(cake);
		NutDecorator nd=new NutDecorator(fd);
		CardDecorator cd=new CardDecorator(nd);
		cd.make();
	}
	结果:
	制作了一个巧克力蛋糕
	放上一点水果
	放上一点干果
	放入一张card

总结:

优点:

  • 装饰类和被装饰类是可以独立的,低耦合的。互相都不用知道对方的存在
  • 装饰模式是继承的一种替代方案,无论包装多少层,返回的对象都是is-a的关系(上面的例子:包装完还是Phone类型)。
  • 实现动态扩展,只要继承了装饰器就可以动态扩展想要的功能了。

缺点:

  • 多层装饰是比较复杂的,提高了系统的复杂度。不利于我们调试~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值