对于装饰模式而言,核心就是装饰类Decorator,假设接口为impl,提供一个原始抽象方法operation,其实现类为Con,提供operation的原始实现,最初的调用应该是创建一个Con的对象直接调用Con的方法。现在想在原始实现方法基础上新增功能,那么就可以借助Decorator实现。
public class Decorator implements Component {
// 关联原抽象业务
private Component component;
public Decorator(Component component) {
super();
this.component = component;
}
@Override
public void operation() {
// TODO 自动生成的方法存根
if(component != null)
component.operation();
}
}
package mode.Decorator;
public class ConcreteComponent implements Component {
@Override
public void operation() {
// TODO 自动生成的方法存根
System.out.println("这是ConcreteComponent中的原始的接口实现方法!\n");
}
}
package mode.Decorator;
public interface Component {
public void operation();
}
package mode.Decorator;
public class ConcreteDecorator extends Decorator {
public ConcreteDecorator(Component component) {
super(component);
// TODO 自动生成的构造函数存根
}
@Override
public void operation() {
// TODO 自动生成的方法存根
// super.operation();
System.out.println("这是ConcreteDecorator类中实现Decorator的operation方法后扩展的功能!\n");
}
}
package mode.Decorator;
public class ConcreteDecorator1 extends Decorator {
public ConcreteDecorator1(Component component) {
super(component);
// TODO 自动生成的构造函数存根
}
@Override
public void operation() {
// TODO 自动生成的方法存根
// super.operation();
System.out.println("#########################################");
System.out.println("这是ConcreteDecorator1类中实现Decorator的operation方法后扩展的功能!\n");
}
}
PS:
可以根据super自选是否继承原有的方法体。