裝飾者設計模式
阿新 • • 發佈:2018-12-11
裝飾者模式具有的一些特徵
1,裝飾者(decorator)和被裝飾(擴充套件)的物件有著相同的超類(supertype)。
2,我們可以用多個裝飾者去裝飾一個物件。
3,我們可以用裝飾過的物件替換程式碼中的原物件,而不會出問題(因為他們有相同的超類)。
4,裝飾者可以在委託(delegate,即呼叫被裝飾的類的成員完成一些工作)被裝飾者的行為完成之前或之後加上他自己的行為。
5,一個物件能在任何時候被裝飾,甚至是執行時。
不多說了自己敲一邊程式碼就能體會到裡面的精華
程式碼如下:
public abstract class Component { public abstract void display(); }
/** * Created by kim on 2018/9/20. */ public class ComponentDectorator extends Component { private Component component; public ComponentDectorator(Component component){ this.component=component; } @Override public void display() { component.display(); } }
/** * Created by kim on 2018/9/20. */ public class BlackBoarderDecorator extends ComponentDectorator { public BlackBoarderDecorator(Component component) { super(component); } public void display(){ this.setBlackBoarder(); super.display(); } private void setBlackBoarder(){ System.out.println("為構件增加黑色邊框!"); } }
package com.mj.designmode.decorator_mode; /** * Created by kim on 2018/9/20. * */ public class ScrollBarDecorator extends ComponentDectorator { public ScrollBarDecorator(Component component) { super(component); } public void display(){ this.setScrollBar(); super.display(); } public void setScrollBar(){ System.out.println("為構件增加滾動條!"); } }
呼叫程式碼
Component component,componentS,componentB; component=new Window(); componentS = new ScrollBarDecorator(component); componentS.display(); componentB=new BlackBoarderDecorator(componentS); componentB.display();