第209章
大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();
}
}