外觀模式(Facade Pattern)隱藏系統的複雜性,並向客戶端提供了一個客戶端能夠訪問系統的接口。這種類型的設計模式屬於結構型模式,它向現有的系統添加一個接口,來隱藏系統的複雜性。java
這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現有系統類方法的委託調用。設計模式
意圖
爲子系統中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。安全
主要解決
下降訪問複雜系統的內部子系統時的複雜度,簡化客戶端與之的接口。ide
如何解決
客戶端不與系統耦合,外觀類與系統耦合。設計
關鍵代碼
在客戶端和複雜系統之間再加一層,這一層將調用順序、依賴關係等處理好。code
缺點
不符合開閉原則,若是要改東西很麻煩,繼承重寫都不合適。blog
咱們將建立一個Shape
接口和實現了Shape
接口的實體類。下一步是定義一個外觀類ShapeMaker
。繼承
ShapeMaker
類使用實體類來表明用戶對這些類的調用。FacadePatternDemo
,咱們的演示類使用ShapeMaker
類來顯示結果。接口
Shape.java
public interface Shape { void draw(); }
Rectangle.javaci
public class Rectangle implements Shape { @Override public void draw() { System.out.println("Rectangle::draw()"); } }
Square.java
public class Square implements Shape { @Override public void draw() { System.out.println("Square::draw()"); } }
Circle.java
public class Circle implements Shape { @Override public void draw() { System.out.println("Circle::draw()"); } }
ShapeMaker.java
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 drawCircle(){ circle.draw(); } public void drawRectangle(){ rectangle.draw(); } public void drawSquare(){ square.draw(); } public static void main(String[] args) { ShapeMaker shapeMaker = new ShapeMaker(); shapeMaker.drawCircle(); shapeMaker.drawRectangle(); shapeMaker.drawSquare(); } }
Circle::draw() Rectangle::draw() Square::draw()