关于Decorator模式的几点想法

1)Decorator的构造子应该有且只有一个Component类型的参数
2)Component强烈建议是接口而不是抽象类。这样做的好处是Decorator不会遗漏对Component接口的委派。如果必须是抽象类那一定要注意变量只能是private修饰符并且Decerator实现了所有非private函数的委派。这也符合代码朝上,状态朝下的设计原则。

参照《java与模式》中的发票例子:
Order so = new SaleOrder();
so.setCustomerName("aaa"); //!!!
Order so1 = new HeaderDecorator(so);
Order so2 = new FooterDecorator(so);
so.setCustomerName("bbb"); //!!!

//猜猜看,会打印出什么?
so1.print();
so2.print();

感觉Decorator的实现类似Default Adapter。但不是对每个方法进行贫庸实现而是进行委派。

没有明白什么意思,是说Decorator的变量尽量 private吗???

> 没有明白什么意思,是说Decorator的变量尽量
> private吗???

不是Decorator,而是Compenent(《java与模式》中的教法)或者叫Decoratoree。