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();