package com.roc.decorator;
/**
* 抽象构建者,提供一个抽象方法
* @author lenovo
*
*/
public abstract class Component {
public abstract void baseFeature();
}
package com.roc.decorator;
/**
* 具体构件器继承抽象构件器,提供基本功能
* @author lenovo
*
*/
public class BaseComponent extends Component {
@Override
public void baseFeature() {
// TODO Auto-generated method stub
System.out.println("I just have base feature");
}
}
package com.roc.decorator;
/**
* 装饰者继承抽象构建者,并持有对具体构件者的引用
* @author lenovo
*
*/
public class Decorator extends Component {
private Component component;
public Decorator(Component component) {
this.component = component;
}
@Override
public void baseFeature() {
component.baseFeature();
}
}
package com.roc.decorator;
public class Enhance1Decorator extends Decorator {
public Enhance1Decorator(Component component) {
super(component);
}
@Override
public void baseFeature() {
super.baseFeature();
System.out.println("增强功能1..............................");
}
}
package com.roc.decorator;
public class Enhance2Decorator extends Decorator {
public Enhance2Decorator(Component component) {
super(component);
}
@Override
public void baseFeature() {
super.baseFeature();
System.out.println("增强功能2###################################");
}
}
package com.roc.decorator;
/**
* 构建一个完成的装饰器模式示例需要四个角色
* 1:抽象构件者
* 2:具体构建者(被装饰者)
* 3:装饰者
* 3:具体装饰者
* 他们之间的关系
* 装饰者继承抽象构件者,并持有具体构建者的引用
* 具体装饰者继承装饰者,并对重写装饰者的方法,实现具体功能的增强,实现构造方法
* 具体构件者继承抽象构件者,提供基本功能
* @author lenovo
*
*/
public class DecoratorExam {
public static void main(String[] args) {
// TODO Auto-generated method stub
Enhance1Decorator enhance1 = new Enhance1Decorator(new BaseComponent() );
enhance1.baseFeature();
Enhance2Decorator enhance2 = new Enhance2Decorator(new BaseComponent() );
enhance2.baseFeature();
Enhance2Decorator enhance = new Enhance2Decorator(new Enhance1Decorator(new BaseComponent()) );
enhance.baseFeature();
}
}