定义:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活。
代码:
package decorator_model;
/**
* @author naivor
* 装饰模式-场景类
*/
public class DecoratorModel {
public static void main(String [] args){
ConcreteComponent component=new ConcreteComponent();
FunctionA functionA=new FunctionA();
FunctionB functionB=new FunctionB();
functionA.setComponent(component); //给component动态添加功能A和B
functionB.setComponent(functionA);
functionB.operate();
}
}
/**
*
* @author naivor
* 装饰模式-功能抽象类
*/
abstract class Component{
public abstract void operate();
}
/**
*
* @author naivor
* 装饰模式-具体功能类
*/
class ConcreteComponent extends Component{
@Override
public void operate() {
//具体的业务处理方法
}
}
/**
*
* @author naivor
* 装饰模式-装饰者类
*/
class Decorator extends ConcreteComponent{
private ConcreteComponent component;
public Decorator() {
}
public void setComponent(ConcreteComponent component) {
this.component=component;
}
@Override
public void operate() {
if (component!=null) {
component.operate();
}
}
}
/**
*
* @author naivor
* 装饰模式-扩展功能A类
*/
class FunctionA extends Decorator{
@Override
public void operate() {
super.operate();
addFunctionA();
}
private void addFunctionA(){
//要添加的新功能A
}
}
/**
*
* @author naivor
* 装饰模式-扩展功能B类
*/
class FunctionB extends Decorator{
@Override
public void operate() {
super.operate();
addFunctionB();
}
private void addFunctionB(){
//要添加的新功能B
}
}