外觀模式

描述

????外觀模式是對(duì)象的結(jié)構(gòu)模式侥锦,外部與一個(gè)子系統(tǒng)的通信必須通過(guò)一個(gè)統(tǒng)一的外部對(duì)象進(jìn)行视搏。外觀模式提供一個(gè)高層次的接口伟墙,使得子系統(tǒng)更易于使用钳吟。

簡(jiǎn)介

外觀模式類圖

????外觀模式通過(guò)為多個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)一致的接口,而使這些子系統(tǒng)更加容易被訪問(wèn)的模式贴见。該模式對(duì)外有一個(gè)統(tǒng)一接口烘苹,外部應(yīng)用程序不用關(guān)心內(nèi)部子系統(tǒng)的具體的細(xì)節(jié),這樣會(huì)大大降低應(yīng)用程序的復(fù)雜度片部,提高了程序的可維護(hù)性镣衡。

角色

  • 外觀(Facade)角色 :為多個(gè)子系統(tǒng)對(duì)外提供一個(gè)共同的接口。
  • 子系統(tǒng)(SubSystem)角色 :實(shí)現(xiàn)系統(tǒng)的部分功能档悠,客戶可以通過(guò)外觀角色訪問(wèn)它廊鸥。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 降低了客戶端與子系統(tǒng)的耦合關(guān)系,讓子系統(tǒng)內(nèi)部的模塊能更容易擴(kuò)展和維護(hù)辖所。
  • 讓子系統(tǒng)更加易用惰说,客戶端不再需要了解子系統(tǒng)內(nèi)部的實(shí)現(xiàn),也不需要跟眾多子系統(tǒng)內(nèi)部的模塊進(jìn)行交互缘回,只需要跟外觀對(duì)象交互就可以了吆视。
  • 通過(guò)合理使用Facade,可以幫助我們更好地劃分訪問(wèn)的層次酥宴。有些方法是對(duì)系統(tǒng)外的啦吧,有些方法是系統(tǒng)內(nèi)部使用的。把需要暴露給外部的功能集中到外觀中拙寡,這樣既方便客戶端使用授滓,也很好地隱藏了內(nèi)部的細(xì)節(jié)。

缺點(diǎn)

  • 增加新的子系統(tǒng)可能需要修改外觀類或客戶端的源代碼肆糕,違背了“開(kāi)閉原則”般堆。

使用場(chǎng)景

  • 對(duì)分層結(jié)構(gòu)系統(tǒng)構(gòu)建時(shí),使用外觀模式定義子系統(tǒng)中每層的入口點(diǎn)可以簡(jiǎn)化子系統(tǒng)之間的依賴關(guān)系擎宝。
  • 當(dāng)一個(gè)復(fù)雜系統(tǒng)的子系統(tǒng)很多時(shí)郁妈,外觀模式可以為系統(tǒng)設(shè)計(jì)一個(gè)簡(jiǎn)單的接口供外界訪問(wèn)。
  • 當(dāng)客戶端與多個(gè)子系統(tǒng)之間存在很大的聯(lián)系時(shí)绍申,引入外觀模式可將它們分離,從而提高子系統(tǒng)的獨(dú)立性和可移植性。

示例

public interface Shape {
    void draw();
}
/**
* 子系統(tǒng)(SubSystem)角色
*/
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Circle:draw()!");
    }
}
/**
* 子系統(tǒng)(SubSystem)角色
*/
public class Square implements Shape{
    @Override
    public void draw() {
        System.out.println("Square:draw()!");
    }
}
/**
* 子系統(tǒng)(SubSystem)角色
*/
public class Rectangle implements Shape{
    @Override
    public void draw() {
        System.out.println("Rectangle:draw()!");
    }
}
/**
* 外觀(Facade)角色
*/
public class ShapeMaker {
    private Shape circle;
    private Shape rectangle;
    private Shape square;

    public ShapeMaker() {
        circle = new Circle();
        rectangle = new Rectangle();
        square = new Square();
    }

    public void drawAll() {
        circle.draw();
        rectangle.draw();
        square.draw();
    }
}
public class FacadeDemo {
    public static void main(String[] args) {
        ShapeMaker shapeMaker = new ShapeMaker();

        shapeMaker.drawAll();
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末极阅,一起剝皮案震驚了整個(gè)濱河市胃碾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筋搏,老刑警劉巖仆百,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奔脐,居然都是意外死亡俄周,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門髓迎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)峦朗,“玉大人,你說(shuō)我怎么就攤上這事排龄〔ㄊ疲” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵橄维,是天一觀的道長(zhǎng)尺铣。 經(jīng)常有香客問(wèn)我,道長(zhǎng)争舞,這世上最難降的妖魔是什么凛忿? 我笑而不...
    開(kāi)封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮竞川,結(jié)果婚禮上店溢,老公的妹妹穿的比我還像新娘。我一直安慰自己流译,他們只是感情好逞怨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著福澡,像睡著了一般叠赦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上革砸,一...
    開(kāi)封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天除秀,我揣著相機(jī)與錄音,去河邊找鬼算利。 笑死册踩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的效拭。 我是一名探鬼主播暂吉,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼胖秒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了慕的?” 一聲冷哼從身側(cè)響起阎肝,我...
    開(kāi)封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肮街,沒(méi)想到半個(gè)月后风题,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嫉父,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年沛硅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绕辖。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡摇肌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出引镊,到底是詐尸還是另有隱情朦蕴,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布弟头,位于F島的核電站吩抓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赴恨。R本人自食惡果不足惜疹娶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伦连。 院中可真熱鬧雨饺,春花似錦、人聲如沸惑淳。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)歧焦。三九已至移斩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绢馍,已是汗流浹背向瓷。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舰涌,地道東北人猖任。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瓷耙,于是被迫代替她去往敵國(guó)和親朱躺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刁赖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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