重走Java設計模式——外觀模式(Facade Pattern)
阿新 • • 發佈:2018-11-09
外觀模式
定義
外觀模式(Facade Pattern)隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的介面。這種型別的設計模式屬於結構型模式,它向現有的系統新增一個介面,來隱藏系統的複雜性。
這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現有系統類方法的委託呼叫。
程式碼示例
我們將建立一個 Shape
介面和實現了 Shape 介面的實體類。下一步是定義一個外觀類 ShapeMaker
。
ShapeMaker
類使用實體類來代表使用者對這些類的呼叫。FacadePatternDemo
,我們的演示類使用ShapeMaker
類來顯示結果。
1.建立一個介面
Shape.java
public interface Shape {
void draw();
}
2.建立實現介面的實體類
Rectangle.java
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()");
}
}
3.建立一個外觀類
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(); } }
4.使用該外觀類畫出各種型別的形狀
FacadePatternDemo.java
public class FacadePatternDemo {
public static void main(String[] args) {
ShapeMaker shapeMaker = new ShapeMaker();
shapeMaker.drawCircle();
shapeMaker.drawRectangle();
shapeMaker.drawSquare();
}
}
5.驗證輸出
Circle::draw()
Rectangle::draw()
Square::draw()
優缺點
優點
- 減少系統相互依賴;
- 提高靈活性;
- 提高了安全性。
缺點
不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適。
適用場景
- 為複雜的模組或子系統提供外界訪問的模組。
- 子系統相對獨立。
- 預防低水平人員帶來的風險。
使用的注意事項
在層次化結構中,可以使用外觀模式定義系統中每一層的入口。