原文位址: http://www.work100.net/training/monolithic-architecture-design-patterns-facade-pattern.html 更多教程: 光束雲 - 免費課程
外觀模式
請參照如上
章節導航
進行閱讀
1.概述
外觀模式(
Facade Pattern
)隐藏系統的複雜性,并向用戶端提供了一個用戶端可以通路系統的接口。這種類型的設計模式屬于結構型模式,它向現有的系統添加一個接口,來隐藏系統的複雜性。
這種模式涉及到一個單一的類,該類提供了用戶端請求的簡化方法和對現有系統類方法的委托調用。
意圖:
為子系統中的一組接口提供一個一緻的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
主要解決:
降低通路複雜系統的内部子系統時的複雜度,簡化用戶端與之的接口。
何時使用:
- 用戶端不需要知道系統内部的複雜聯系,整個系統隻需提供一個"接待員"即可。
- 定義系統的入口。
如何解決:
用戶端不與系統耦合,外觀類與系統耦合。
關鍵代碼:
在用戶端和複雜系統之間再加一層,這一層将調用順序、依賴關系等處理好。
應用執行個體:
- 去醫院看病,可能要去挂号、門診、劃價、取藥,讓患者或患者家屬覺得很複雜,如果有提供接待人員,隻讓接待人員來處理,就很友善。
- Java 的三層開發模式。
優點:
- 減少系統互相依賴。
- 提高靈活性。
- 提高了安全性。
缺點:
不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合适。
使用場景:
- 為複雜的子產品或子系統提供外界通路的子產品。
- 子系統相對獨立。
- 預防低水準人員帶來的風險。
注意事項:
在階層化結構中,可以使用外觀模式定義系統中每一層的入口。
2.實作
我們将建立一個
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()
上一篇:
裝飾器模式下一篇:
享元模式如果對課程内容感興趣,可以掃碼關注我們的或
公衆号
,及時關注我們的課程更新
QQ群
