1. 程式人生 > >裝飾者設計模式

裝飾者設計模式

裝飾者模式具有的一些特徵

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();