在上一篇文章中,我們描述了適配器設計模式 。 在今天的文章中,我們將展示另一種類似的“四結構幫派”模式 。 顧名思義,結構模式用于從許多不同的對象形成更大的對象結構。 外觀模式就是這樣一種模式,它為系統內的一組接口提供了簡化的接口,因此對客戶端隱藏了子系統的復雜性。
何時使用外墻圖案?
分層:外觀模式可以在JEE應用程序中用于創建一個層,以抽象和統一應用程序中的相關接口。 使用外觀將為每個子系統級別定義一個入口點,從而使它們只能通過其外觀進行通信。 這樣可以簡化它們之間的依賴關系。
Fa?ade使API和庫更易于使用,有利于維護和可讀性。 它還可以使用單個簡化的API整理和抽象各種設計不當的API。
它還減少了外部代碼對庫內部工作的依賴性,從而提供了靈活性。
立面設計圖案結構
在上述Fa?ade模式的結構中,Fa?ade類將子系統與客戶端隔離。 客戶端僅與Fa?ade類進行交互,而無需了解子系統類。
例:
讓我們以在線訂單處理網站為例。 客戶在不了解內部類如何工作的情況下下了訂單。 下訂單后,外觀類層將調用子系統的方法(例如,用于庫存檢查的“庫存”和用于處理付款的“付款”)。 處理后,它將控制返回給客戶端類,并帶有關于正在處理的訂單的確認。
順序圖:
外墻設計順序圖
代碼示例:
Inventory.java –
public class Inventory {public String checkInventory(String OrderId) {return 'Inventory checked';}
}
Payment.java
public class Payment {public String deductPayment(String orderID) {return 'Payment deducted successfully';}
}
OrderFacade.java
public class OrderFacade {private Payment pymt = new Payment();private Inventory inventry = new Inventory();public void placeOrder(String orderId) {String step1 = inventry.checkInventory(orderId);String step2 = pymt.deductPayment(orderId);System.out.println('Following steps completed:' + step1 + ' & ' + step2);}
}
客戶端程序
public class Client {public static void main(String args[]){OrderFacade orderFacade = new OrderFacade();orderFacade.placeOrder('OR123456');System.out.println('Order processing completed');}
}
優點:
- 我們可以使用fa?ade模式來整理所有復雜的方法調用和相關的代碼塊,并將其通過一個單獨的Fa?ade類進行通道化。 這樣,對于客戶而言,只有一個呼叫。 即使我們更改了子系統包/類及其邏輯,也不會影響客戶端調用。 簡而言之,這增加了松散的耦合。
- 它使創建和使用更加結構化的環境變得更加容易使用和維護,并減少了庫或其他軟件包之間的依賴性。
缺點/后果:
- 缺點之一是子系統方法連接到Fa?ade層。 如果子系統的結構發生變化,則需要隨后對Fa?ade層和客戶端方法進行更改。
有趣的一點:
外墻樣式可能與調解人樣式混淆。 中介器還以類似于外觀的方式抽象了子系統的功能。 但是,這兩種模式之間存在細微的差異。 在中介程序模式的情況下,子系統知道中介程序,但是在立面的情況下,子系統對立面一無所知。 這是從Fa?ade到子系統的一種單向通信。
Java API中使用的外觀
- javax.servlet.http.HttpSession
- javax.servlet.http.HttpServletRequest
- javax.servlet.http.HttpServletResponse
- javax.faces.context.ExternalContext
參考:立面 設計模式–來自我們的JCG合作伙伴 Mainak Goswami在Idiotechie博客上的設計觀點 。
翻譯自: https://www.javacodegeeks.com/2012/11/facade-design-pattern-design-standpoint.html