設計模式-裝飾模式
阿新 • • 發佈:2018-12-18
裝飾模式的UML類圖
你會發現,在裝飾模式中,除了對抽象介面的實現,更重要的還有對抽象介面的聚合。 裝飾模式一般適應於常為系統已有的功能動態的新增更多的功能。 1、將會更新的功能的進行抽象
package decorate_1;
public interface Component {
public void opration();
}
2、原有功能實現
package decorate_1;
public class ConcreteComponent implements Component {
@Override
public void opration() {
System. out.println("原有功能");
}
}
3、將要附加裝飾進行抽象
package decorate_1;
//為子類提供模板
public abstract class Decorator implements Component{
Component base = null;
@Override
public void opration() {
if(base != null){
base.opration();
}
}
public void setComponent(Component base){
this.base = base;
}
}
4、具體裝飾類A
package decorate_1;
public class ConcreteDecoratorA extends Decorator {
private String addedState;
@Override
public void opration() {
super.opration(); //先執行原有的operation()
//...下面為本類自帶的特殊邏輯和其他具體操作
this.addedState = "abc";
System.out.println("ConcreteDecoratorA operations");
}
public void printState (){ //該自帶的特殊方法
System.out.println(this.addedState);
}
}
5、具體裝飾類B
package decorate_1;
public class ConcreteDecoratorB extends Decorator {
@Override
public void opration() {
super.opration();
this.otherOperation();
}
public void otherOperation(){
System.out.println("ConcreteDecoratorB operations");
}
}
6、Main客戶端
package decorate_1;
public class Main {
public static void main(String[] args) {
ConcreteComponent concreateComponent = new ConcreteComponent();
ConcreteDecoratorA cda = new ConcreteDecoratorA();
ConcreteDecoratorB cdb = new ConcreteDecoratorB();
//裝飾
cda.setComponent(concreateComponent);
cdb.setComponent(cda);
//開始執行
cdb.opration();
}
}
使用裝飾模式的一個例子
裝飾模式就像穿衣服,如穿衣服需要先穿內褲,再穿上衣或者褲子,或者再加個外套, 比如哪天你不想穿外套,或者在外套外再加層風衣,穿衣的方式是多樣的。 如: 將Person作為ConcreteComponent,其中show()顯示姓名。 Component介面中抽象出show()方法。 將穿衣服、褲子、鞋子抽象成Decorator,並具體實現ConcreteDecorator。