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