大B:“簡化必須注意兩點:1、一個裝飾器類的接口必須與被裝飾的類的接口相容。2、儘量保持Component作爲一個‘輕’類。Component類的職責在於爲各個具體裝飾器類提供共同的接口,而不是存儲數據,所以不要把太多的邏輯和狀態放在Component類裡面。省略Component接口,只有一個具體的ConcreteComponent類,則Decorater經常作爲ConcreteComponent的子類。”
//Component.java構件類
publicabstractclassComponent
{
publicabstractvoiddoSomething();
}
//ConcreteComponent.java具體構件類
publicclassConcreteComponentextendsComponent
{
publicvoiddoSomething()
{
//provideimplementationhere
}
}
//Decorator.java裝飾器抽象類
publicabstractclassDecoratorextendsComponent
{
protectedComponentponent;
publicDecorator(Componentponent)
{
this.orgponent=ponent;
}
publicvoiddoSomething()
{
ponent.doSomething();
}
}
//ConcreteDecorator.java具體裝飾器類
publicclassConcreteDecoratorextendsDecorator
{
publicConcreteDecorator(Componentponent)
{
super(ponent);
}
privatevoidaddedBehavior()
{
//someextrafunctionalitygoeshere
}
publicvoiddoSomething()
{
ponent.doSomething();
addedBehavior();
}
}