立面设计模式–设计观点
在上一篇文章中,我們描述了適配器設(shè)計(jì)模式 。 在今天的文章中,我們將展示另一種類似的“四結(jié)構(gòu)幫派”模式 。 顧名思義,結(jié)構(gòu)模式用于從許多不同的對(duì)象形成更大的對(duì)象結(jié)構(gòu)。 外觀模式就是這樣一種模式,它為系統(tǒng)內(nèi)的一組接口提供了簡(jiǎn)化的接口,因此對(duì)客戶端隱藏了子系統(tǒng)的復(fù)雜性。
何時(shí)使用外墻圖案?
分層:外觀模式可以在JEE應(yīng)用程序中用于創(chuàng)建一個(gè)層,以抽象和統(tǒng)一應(yīng)用程序中的相關(guān)接口。 使用外觀將為每個(gè)子系統(tǒng)級(jí)別定義一個(gè)入口點(diǎn),從而使它們只能通過其外觀進(jìn)行通信。 這樣可以簡(jiǎn)化它們之間的依賴關(guān)系。
Fa?ade使API和庫更易于使用,有利于維護(hù)和可讀性。 它還可以使用單個(gè)簡(jiǎn)化的API整理和抽象各種設(shè)計(jì)不當(dāng)?shù)腁PI。
它還減少了外部代碼對(duì)庫內(nèi)部工作的依賴性,從而提供了靈活性。
立面設(shè)計(jì)圖案結(jié)構(gòu)
在上述Fa?ade模式的結(jié)構(gòu)中,Fa?ade類將子系統(tǒng)與客戶端隔離。 客戶端僅與Fa?ade類進(jìn)行交互,而無需了解子系統(tǒng)類。
例:
讓我們以在線訂單處理網(wǎng)站為例。 客戶在不了解內(nèi)部類如何工作的情況下下了訂單。 下訂單后,外觀類層將調(diào)用子系統(tǒng)的方法(例如,用于庫存檢查的“庫存”和用于處理付款的“付款”)。 處理后,它將控制返回給客戶端類,并帶有關(guān)于正在處理的訂單的確認(rèn)。
順序圖:
外墻設(shè)計(jì)順序圖
代碼示例:
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');} }
優(yōu)點(diǎn):
- 我們可以使用fa?ade模式來整理所有復(fù)雜的方法調(diào)用和相關(guān)的代碼塊,并將其通過一個(gè)單獨(dú)的Fa?ade類進(jìn)行通道化。 這樣,對(duì)于客戶而言,只有一個(gè)呼叫。 即使我們更改了子系統(tǒng)包/類及其邏輯,也不會(huì)影響客戶端調(diào)用。 簡(jiǎn)而言之,這增加了松散的耦合。
- 它使創(chuàng)建和使用更加結(jié)構(gòu)化的環(huán)境變得更加容易使用和維護(hù),并減少了庫或其他軟件包之間的依賴性。
缺點(diǎn)/后果:
- 缺點(diǎn)之一是子系統(tǒng)方法連接到Fa?ade層。 如果子系統(tǒng)的結(jié)構(gòu)發(fā)生變化,則需要隨后對(duì)Fa?ade層和客戶端方法進(jìn)行更改。
有趣的一點(diǎn):
外墻樣式可能與調(diào)解人樣式混淆。 中介器還以類似于外觀的方式抽象了子系統(tǒng)的功能。 但是,這兩種模式之間存在細(xì)微的差異。 在中介程序模式的情況下,子系統(tǒng)知道中介程序,但是在立面的情況下,子系統(tǒng)對(duì)立面一無所知。 這是從Fa?ade到子系統(tǒng)的一種單向通信。
Java API中使用的外觀
- javax.servlet.http.HttpSession
- javax.servlet.http.HttpServletRequest
- javax.servlet.http.HttpServletResponse
- javax.faces.context.ExternalContext
參考:立面 設(shè)計(jì)模式–來自我們的JCG合作伙伴 Mainak Goswami在Idiotechie博客上的設(shè)計(jì)觀點(diǎn) 。
翻譯自: https://www.javacodegeeks.com/2012/11/facade-design-pattern-design-standpoint.html
總結(jié)
以上是生活随笔為你收集整理的立面设计模式–设计观点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将微信聊天记录导出到电脑上如何将微信
- 下一篇: 根据您的命令-命令设计模式