1. 程式人生 > >"裝飾模式"-之Java,Android面試必問設計模式(6/9)

"裝飾模式"-之Java,Android面試必問設計模式(6/9)

下面我們開始講到面試必問的第六種設計模式:裝飾模式

“裝飾模式**

概念:
為了給一個物件增加功能:一個介面,一個具體類實現了方法,為了拓展方法,增加一個”裝飾類”繼承介面,(裝飾類裡宣告被裝飾類的例項),方法裡面有舊例項的方法,然後加上新的方法即可完成拓展.

1.一個介面
2.一個類繼承介面
3.另一個叫裝飾類的也繼承這個介面,為了拓展功能,並且持有"被裝飾類"的例項,並能呼叫原來的方法

程式碼

//一個插座"介面"
interface Socket {
    void useSoket();
}

//一個具體的插座"類"
class ConcreateSocket
implements Socket {
@Override public void useSoket() { System.out.println("標準的排插,有三口和兩口的"); } } //裝飾類,也是一個具體的"插座類",實現同樣的介面,持有被裝飾類的例項 class XiaoMiSocket implements Socket { ConcreateSocket cs; public XiaoMiSocket(ConcreateSocket cs) { this.cs = cs; } @Override public
void useSoket() { //有了原本的功能,又有新的功能 cs.useSoket(); System.out.println("我是小米插頭,有USB口的"); } } //測試 class Test { public static void main(String[] args) { //被裝飾類(被增加功能)的例項 ConcreateSocket cs =new ConcreateSocket(); //裝飾類,持有被裝飾類的例項 Socket xiaomi = new
XiaoMiSocket(cs); xiaomi.useSoket(); } }

輸出:

標準的排插,有三口和兩口的
我是小米插頭,有USB口的

總結:

1.為了拓展功能
2.被裝飾類(老的方法)和修飾類(新的方法),都繼承一個介面(統一名字的方法)
3."修飾類"擁有"被修飾類"的例項,使用"自己"方法的時候,呼叫被修飾例項的方法,從而達到拓展功能的目的.