个人理解装饰着模式作用:
1) 有一个基本功能的实现类
2) 需要向基本功能添加的附属功能
- Component:抽象出的主体对象。
- ConcreteComponent:是要动态扩展的对象,它继承自Component.
- Decorator:是装饰器的接口。(这里的接口并不是指java的interface)。
- ConcreteDecoratorA:实现Decorator的类,包含了一个Component引用,这样就可以扩展Component的方法了。
测试代码:
1 顶层的抽象接口
package com.decorector;
public interface Component {
//节点流 过滤流
public void doSomething();
}
2 装饰者 需要实现的基本功能
//装饰者 需要实现的基本功能
public class ConcreateComponent implements Component{
@Override
public void doSomething() {
System.out.println("基本功能");
}
}
3 装饰基类,所有装饰器类的父类
// 装饰基类
public class Decorator implements Component{
private Component component;
public Decorator(Component component){
this.component = component;
}
@Override
public void doSomething() {
this.component.doSomething();
}
}
4 最底层的装饰子类 ,即用来装饰 类2的
//最底层的装饰子类
public class ConcreateDecorator1 extends Decorator{
public ConcreateDecorator1(Component component) {
super(component);
}
@Override
public void doSomething() {
super.doSomething();
doAnotherThing();
}
public void doAnotherThing(){
System.out.println( "功能B");
}
}
5 最底层的装饰子类与 ConcreateDecorator1功能相同
// 最底层的装饰子类
public class ConcreateDecorator2 extends Decorator{
public ConcreateDecorator2(Component component) {
super(component);
}
@Override
public void doSomething() {
super.doSomething();
doAnotherThing();
}
private void doAnotherThing(){
System.out.println( "功能C");
}
}
6 测试
public class Test1 {
public static void main(String[] args) {
Component component = new ConcreateComponent();
Component component2 = new ConcreateDecorator1(component );
Component component3 = new ConcreateDecorator2(component2);
component3.doSomething();
}
}