前言
设计模式系列目录
观察者模式(Decorator Pattern) 动态的将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。通过组合实现。
类图
有段时间没有好好写了,现在补上(手动狗头)。
代码
大量代码预警,由于代码变多,写到文章内感觉有点拖沓。
于是提交到Github上了。
https://github.com/software-market/design-pattern(欢迎star,谢谢各位大佬。)
测试代码
public void test() {
// 不要调料 随便来一杯
Beverage beverage = new HouseBlend();
printInfo(beverage);
Beverage beverage1 = new DarkRoast();// 深度烘焙
beverage1 = new Mocha(beverage1);// 摩卡
beverage1 = new Mocha(beverage1);// 摩卡
beverage1 = new Whip(beverage1);// 奶泡
printInfo(beverage1);
// 来一个套娃写法,危险动作,请勿模仿
Beverage beverage2 = new Whip(new Mocha(new Soy(new HouseBlend())));
printInfo(beverage2);
}
void printInfo(Beverage beverage) {
System.out.println(beverage.getDescription() + " $" + beverage.cost());
}
执行结果:
综合 $0.89
深度烘焙,摩卡,摩卡,奶泡 $1.49
综合,豆浆,摩卡,奶泡 $1.34
总结
- 除了继承,装饰者也可以让我们扩展行为。
- 装饰者模式会导致小对象变多,过度使用,会让程序变的复杂。
- JDK内有个IO模型使用了装饰者模式