"裝飾模式"-之Java,Android面試必問設計模式(6/9)
阿新 • • 發佈:2019-01-22
下面我們開始講到面試必問的第六種設計模式:裝飾模式
“裝飾模式**
概念:
為了給一個物件增加功能:一個介面,一個具體類實現了方法,為了拓展方法,增加一個”裝飾類”繼承介面,(裝飾類裡宣告被裝飾類的例項),方法裡面有舊例項的方法,然後加上新的方法即可完成拓展.
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."修飾類"擁有"被修飾類"的例項,使用"自己"方法的時候,呼叫被修飾例項的方法,從而達到拓展功能的目的.