裝飾步驟:
1.裝飾類與被裝飾類要實現同一個接口或繼承同一個父類
2.在裝飾類中持有一個被裝飾引用
3.重寫方法,進行功能增強遍搞。
Component:抽象構件 給出一個抽象接口本橙,以規(guī)范準備接收附加責任的對象
代碼實現:
public interface Component {
public void sampleOperation();
}
ConcreteComponent:具體構建 定義一個將要接收附加責任的類
public class ConcreteComponent implements Component {
@Override
public void sampleOperation() {
// 寫相關的業(yè)務代碼
}
}
Decorator:裝飾角色 定義一個將要接收附加責任的類
public class Decorator implements Component{
private Component component;
public Decorator(Component component){
this.component = component;
}
@Override
public void sampleOperation() {
// 委派給構件
component.sampleOperation();
}
}
ConcreateComponent:具體裝飾 負責給構件對象“貼上”附加的責任
public class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(Component component) {
super(component);
}
@Override
public void sampleOperation() {
super.sampleOperation();
// 寫相關的業(yè)務代碼
}
}
優(yōu)點 | 缺點 |
---|---|
1.比靜態(tài)繼承更加的靈活 | 增加大量功能類似的小對象增加學習難度 |
2.增強原有功能的同時,接口一直不影響原有對象使用 | |
3.裝飾功能可以累加 |