大话设计模式—外观模式
外觀模式(Facade Pattern)隱藏系統(tǒng)的復(fù)雜性,并向客戶端提供了一個(gè)客戶端可以訪問(wèn)系統(tǒng)的接口。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它向現(xiàn)有的系統(tǒng)添加一個(gè)接口,來(lái)隱藏系統(tǒng)的復(fù)雜性。
這種模式涉及到一個(gè)單一的類,該類提供了客戶端請(qǐng)求的簡(jiǎn)化方法和對(duì)現(xiàn)有系統(tǒng)類方法的委托調(diào)用。主要用于解決降低訪問(wèn)復(fù)雜系統(tǒng)的內(nèi)部子系統(tǒng)時(shí)的復(fù)雜度,簡(jiǎn)化客戶端與之的接口。
大話設(shè)計(jì)模式中程杰老師給出的定義是:外觀模式:為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,外觀模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。
外觀模式結(jié)構(gòu)圖:
我們將創(chuàng)建一個(gè) Shape 接口和實(shí)現(xiàn)了 Shape 接口的實(shí)體類。下一步是定義一個(gè)外觀類 ShapeFacade。ShapeFacade類使用實(shí)體類來(lái)代表用戶對(duì)這些類的調(diào)用。FacadePatternDemo,我們的演示類使用 ShapeFacade類來(lái)顯示結(jié)果。
類圖如下:
//形狀接口 public interface Shape {void draw(); }Shape接口實(shí)現(xiàn)類:
public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Rectangle::draw()");} } public class Square implements Shape {@Overridepublic void draw() {System.out.println("Square::draw()");} } public class Circle implements Shape {@Overridepublic void draw() {System.out.println("Circle::draw()");} }本實(shí)例的關(guān)鍵外觀類:
public class ShapeFacade {private Shape circle;private Shape rectangle;private Shape square;public ShapeFacade () {circle = new Circle();rectangle = new Rectangle();square = new Square();}public void drawCircle(){circle.draw();}public void drawRectangle(){rectangle.draw();}public void drawSquare(){square.draw();} } //測(cè)試方法 public class FacadePatternDemo {public static void main(String[] args) {ShapeFacade shapeFacade = new ShapeFacade ();shapeFacade.drawCircle();shapeFacade.drawRectangle();shapeFacade.drawSquare(); } }運(yùn)行結(jié)果:
Circle:draw() Rectangle:draw() Square:draw()使用場(chǎng)景:
1、在設(shè)計(jì)初期,應(yīng)該要有意識(shí)地將不同的兩個(gè)層分離,比如經(jīng)典的三層架構(gòu),就需要考慮在數(shù)據(jù)訪問(wèn)層和業(yè)務(wù)邏輯層、業(yè)務(wù)邏輯層和表示層的層與層之間建立外觀Facade,這樣可以為復(fù)雜的子系統(tǒng)提供一個(gè)簡(jiǎn)單的接口,降低耦合性;
2、在開發(fā)階段,子系統(tǒng)往往因?yàn)椴粩嗟闹貥?gòu)演化而變得越來(lái)越復(fù)雜,大多數(shù)的模式使用時(shí)也都會(huì)產(chǎn)生很多很小的類,這本是好事,但也給外部調(diào)用的用戶程序帶來(lái)了使用上的困難,增加外觀Facade可以提供一個(gè)簡(jiǎn)單的接口,減少它們之間的依賴;
3、在維護(hù)一個(gè)遺留的大系統(tǒng)時(shí),可能這個(gè)系統(tǒng)已經(jīng)非常難以維護(hù)和擴(kuò)展,但因?yàn)樗浅V匾墓δ?#xff0c;新的需求開發(fā)必須要依賴于它,此時(shí)使用外觀模式也是非常合適。我們可以為新系統(tǒng)開發(fā)一個(gè)外觀Facade類,來(lái)提供設(shè)計(jì)粗糙或高度復(fù)雜的遺留代碼的比較簡(jiǎn)潔的接口,讓新系統(tǒng)和Faade對(duì)象交互,Facade與遺留代碼交互所有復(fù)雜的工作。
就如同下圖描繪的:
優(yōu)點(diǎn):
1、減少系統(tǒng)相互依賴。
2、提高靈活性。
3、提高了安全性。
缺點(diǎn):不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適。
注意事項(xiàng):在層次化結(jié)構(gòu)中,可以使用外觀模式定義系統(tǒng)中每一層的入口。
總結(jié)
以上是生活随笔為你收集整理的大话设计模式—外观模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 大话设计模式—模板方法模式
- 下一篇: 大话设计模式—建造者模式