定義:動態地給一個對象添加一些額外的職責。就增加功能來說,裝飾模式相比生成子類更加靈活。
代碼:
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
}
}