外觀模式

定義:

要求一個(gè)子系統(tǒng)的外部與內(nèi)部的通信必須通過(guò)一個(gè)統(tǒng)一的對(duì)象進(jìn)行。

外觀模式.png

例子1:
日常中可以打電話、拍照、微信聊天等,沒(méi)有智能手機(jī)之前,這些事情都是分開(kāi)做的,現(xiàn)在有了智能手機(jī)。
你只需要通過(guò)調(diào)用手機(jī)這個(gè)統(tǒng)一對(duì)象,就可以干所有事情,而且不必知道里面的構(gòu)造和實(shí)現(xiàn)。

例子2:股民炒股
未使用外觀模式情況

1.png

要讓股民盡可能少的與股票直接打交道,給其提供一個(gè)蒙面,讓股民跟蒙面打交道。這樣就符合了迪米特法則,讓股民盡可能少的與股票打交道了。增加了外觀模式后的類(lèi)圖:

2.png

2.實(shí)現(xiàn)代碼

未使用外觀模式情況下,代碼如下
子系統(tǒng)代碼:

public class SubSystemClass {
    public void methodOne(){
        System.out.println("子系統(tǒng)方法1");
    }
}
class SubSystemClass2{
    public void methodTwo(){
        System.out.println("子系統(tǒng)方法2");
    }
}
class SubSystemClass3{
    public void methodThree(){
        System.out.println("子系統(tǒng)方法3");
    }
}

客戶端

public static void main(String[] args) {
    //未使用外觀模式情況
    SubSystemClass s1 = new SubSystemClass();
    SubSystemClass2 s2 = new SubSystemClass2();
    SubSystemClass3 s3 = new SubSystemClass3();
    s1.methodOne();
    s2.methodTwo();
    s3.methodThree();
     
}

使用外觀模式:新增一個(gè)Facade類(lèi)

/**
 * 外觀模式:封裝子系統(tǒng),對(duì)外提供一個(gè)門(mén)面方法
 */
public class Facade {
    //所有子系統(tǒng)的引用
    private SubSystemClass s1 = null;
    private SubSystemClass2 s2 = null;
    private SubSystemClass3 s3 = null;
    //構(gòu)造子系統(tǒng)的引用
    public Facade() {
        this.s1 = new SubSystemClass();
        this.s2 = new SubSystemClass2();
        this.s3 = new SubSystemClass3();
    }
    /**
     * 具體的外觀方法
     */
    public void facade(){
        s1.methodOne();
        s2.methodTwo();
        s3.methodThree();
    }
}

客戶端

public static void main(String[] args) {       
    //使用了外觀模式后
    System.out.println("-----------------------");
    Facade facade = new Facade();
    facade.facade();
}

兩次的輸出結(jié)果為:

            子系統(tǒng)方法1

            子系統(tǒng)方法2

            子系統(tǒng)方法3

            -----------------------

            子系統(tǒng)方法1

            子系統(tǒng)方法2

            子系統(tǒng)方法3

3.總結(jié)

其實(shí)外觀模式就是我們常見(jiàn)的封裝,在我們實(shí)際開(kāi)發(fā)中,遇到的各種對(duì)子系統(tǒng)各模塊封裝的邏輯,都可以理解為外觀模式

  • JDBC封裝后的,commons提供的DBUtils類(lèi)
  • Hibernate提供的工具類(lèi),Spring JDBC工具類(lèi)等

Android中

  • context中封裝了很多操作,只需要調(diào)用context就可以做很多事情;
  • imageloader
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1 場(chǎng)景問(wèn)題# 1.1 生活中的示例## 外觀模式在現(xiàn)實(shí)生活中的示例很多,比如:組裝電腦,通常會(huì)有兩種方案。 一個(gè)...
    七寸知架構(gòu)閱讀 6,325評(píng)論 7 57
  • 一、模式定義 外觀模式(Facade Pattern):外部與一個(gè)子系統(tǒng)的通信必須通過(guò)一個(gè)統(tǒng)一的外觀對(duì)象進(jìn)行,為子...
    端木軒閱讀 3,664評(píng)論 2 2
  • 本篇文章介紹一種設(shè)計(jì)模式——外觀模式。本篇文章內(nèi)容參考《JAVA與模式》之門(mén)面模式,外觀模式,深入淺出外觀模式(二...
    Ruheng閱讀 7,161評(píng)論 0 8
  • 目錄 本文的結(jié)構(gòu)如下: 什么是外觀模式 模式的結(jié)構(gòu) 代碼示例 優(yōu)點(diǎn)和缺點(diǎn) 適用環(huán)境 模式應(yīng)用 模式擴(kuò)展 補(bǔ)充 一、...
    w1992wishes閱讀 653評(píng)論 0 1
  • 網(wǎng)上一位有著三十年煙齡的大叔問(wèn)我:他想戒煙,不知道能不能成功戒掉。我給他的回答是:別戒煙,真的別去戒煙。我承認(rèn)這很...
    夜來(lái)秋閱讀 927評(píng)論 6 6