外觀(guān)模式

作者:某人_Valar
如需轉(zhuǎn)載請(qǐng)保留原文鏈接;

設(shè)計(jì)模式的3大類(lèi):

  • 創(chuàng)建型模式(5種)建造者模式,單例模式,工廠(chǎng)方法模式,抽象工廠(chǎng)模式,原型模式。
  • 結(jié)構(gòu)性模式(7種)適配器模式,裝飾模式,代理模式,外觀(guān)模式,橋接模式,組合模式,享元模式。
  • 行為型模式(11種)策略模式,模板方法模式,觀(guān)察者模式,迭代器模式,責(zé)任鏈模式,命令模式,備忘錄模式,狀態(tài)模式,訪(fǎng)問(wèn)者模式,中介者模式,解釋器模式。

1. 什么是外觀(guān)模式

外觀(guān)模式隱藏了系統(tǒng)的復(fù)雜性,并向客戶(hù)端提供了一個(gè)客戶(hù)端可以訪(fǎng)問(wèn)系統(tǒng)的接口。
一般在外觀(guān)模式中有下面幾個(gè)角色:

  • Facade:外觀(guān)類(lèi),知道哪些子系統(tǒng)負(fù)責(zé)處理請(qǐng)求,將客戶(hù)端的請(qǐng)求代理給適當(dāng)?shù)淖酉到y(tǒng)對(duì)象。
  • Subsystem:子系統(tǒng)類(lèi),可以有一個(gè)或者多個(gè)子系統(tǒng)。實(shí)現(xiàn)子系統(tǒng)的功能,處理外觀(guān)類(lèi)指派的任務(wù),注意子系統(tǒng)類(lèi)不含有外觀(guān)類(lèi)的引用。

2. 外觀(guān)模式的簡(jiǎn)單實(shí)現(xiàn)

(1)子系統(tǒng)類(lèi)
//子系統(tǒng)招式
public class Zhaoshi {
    public void TaiJiQuan(){
        System.out.println("使用招式太極拳");
    }
    public void QiShangQuan(){
        System.out.println("使用招式七傷拳");
    }
    public void ShengHuo(){
        System.out.println("使用招式圣火令");
    }
}
//子系統(tǒng)內(nèi)功
public class NeiGong {
    public void JiuYang(){
        System.out.println("使用九陽(yáng)神功");
    }
    public void QianKun(){
        System.out.println("使用乾坤大挪移");
    }
}
//子系統(tǒng)經(jīng)脈
public class JingMai {
    public void jingmai(){
        System.out.println("開(kāi)啟經(jīng)脈");
    }
}
(2)外觀(guān)類(lèi)

初始化外觀(guān)類(lèi)的同時(shí)將各個(gè)子系統(tǒng)類(lèi)創(chuàng)建好,并進(jìn)行搭配。

//外觀(guān)類(lèi)張無(wú)忌
public class ZhangWuJi {
    private JingMai jingMai;
    private Zhaoshi zhaoshi;
    private NeiGong neiGong;

    public ZhangWuJi() {
        jingMai = new JingMai();
        zhaoshi = new Zhaoshi();
        neiGong = new NeiGong();
    }

    /**
     *  使用乾坤大挪移
     */
    public void Qiankun(){
        jingMai.jingmai();// 開(kāi)啟經(jīng)脈
        neiGong.QianKun(); //使用內(nèi)功乾坤大挪移
    }

    /**
     * 使用七傷拳
     */
    public void Qishang(){
        jingMai.jingmai();// 開(kāi)啟經(jīng)脈
        neiGong.JiuYang(); //使用內(nèi)功九陽(yáng)神功
        zhaoshi.QiShangQuan(); // 使用招式七傷拳
    }
}
(3)測(cè)試類(lèi)

客戶(hù)端調(diào)用

public class Test {
    public static void main(String[] args){
        ZhangWuJi zhangWuJi = new ZhangWuJi();
        //張無(wú)忌使用乾坤大挪移
        zhangWuJi.Qiankun();
        //張無(wú)忌使用七傷拳
        zhangWuJi.Qishang();
    }
}

運(yùn)行結(jié)果:


image.png

3. 外觀(guān)模式優(yōu)缺點(diǎn)

優(yōu)點(diǎn): 1、減少系統(tǒng)相互依賴(lài)。 2、提高靈活性。 3、提高了安全性。

缺點(diǎn):不符合開(kāi)閉原則,如果要改東西很麻煩,繼承重寫(xiě)都不合適。

4.外觀(guān)模式與裝飾模式的區(qū)別

裝飾模式:封裝一個(gè)對(duì)象,并提供額外的行為,用組合的方式來(lái)替代繼承以擴(kuò)展類(lèi)的功能。

外觀(guān)模式:封裝許多對(duì)象,簡(jiǎn)化它們的接口,定義了一個(gè)更高層的接口,使得子系統(tǒng)更容易被調(diào)用。

參考:

《Android進(jìn)階之光》
外觀(guān)模式-菜鳥(niǎo)教程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容