立面設計模式–設計觀點

在上一篇文章中,我們描述了適配器設計模式 。 在今天的文章中,我們將展示另一種類似的“四結構幫派”模式 。 顧名思義,結構模式用于從許多不同的對象形成更大的對象結構。 外觀模式就是這樣一種模式,它為系統內的一組接口提供了簡化的接口,因此對客戶端隱藏了子系統的復雜性。

何時使用外墻圖案?

分層:外觀模式可以在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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371141.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371141.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371141.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java第三次作業 1502 馬 帥

《Java技術》第三次作業 (一)學習總結 1.書中對面向對象封裝性的定義為:指把對象的屬性和行為看成一個密不可分的整體,把不需要讓外界知道的信息隱蔽起來。簡單來說,就是定義的一些對象,只有在本類中才可以…

sass運算

sass具有運算的特性,可以對數值型的Value(如:數字、顏色、變量等)進行加減乘除四則運算。 請注意運算符前后請留一個空格,不然會出錯。 scss.style css.style 本文轉載于:猿2048https://www.mk2048.com/blog/blog.php?idiij12j&titles…

163 coremail_Icoremail企業郵箱

高速穩定iCoremail企業郵箱于國內外多個網絡運營商的主干網數據中心放置郵件服務器,同時采用我司自主研發的Coremail電子郵件系統,從多方面保障了用戶的流暢體驗。安全可靠iCoremail企業郵箱使用歐洲最大的反病毒安全提供商的Sophos反病毒系列產品&#…

jquery-基礎事件[下]

<script>$(function () {mouseover mouseout mouseenter mouseleave的區別$(div).mouseover(function () {$(this).css(background, red);}).mouseout(function () {$(this).css(background, green);});$(div).mouseenter(function () {$(this).css(background, red);}).…

JavaOne 2012:NetBeans.Next –未來路線圖

我從Continental Ballroom 4和一個NetBeans主題&#xff08; 項目Easel &#xff09;到Continental Ballroom 5&#xff0c;走了必要的幾個步驟&#xff0c;以查看另一個面向NetBeans的演示文稿&#xff1a;“ NetBeans.Next –未來路線圖”。 Ashwin Rao發起了“羽毛之鳥”&am…

LeetCode day30

LeetCode day30 害&#xff0c;昨天和今天在搞數據結構的報告&#xff0c;后面應該也會把哈夫曼的大作業寫上來。 今天認識認識貪心算法。(&#xff61;&#xff65;?&#xff65;)&#xff89; 2697. 字典序最小回文串 給你一個由 小寫英文字母 組成的字符串 s &#xff0c;…

html注冊表

這是第一次使用html寫一個簡單的注冊表&#xff08;有不對的地方希望大家可以幫我指出來謝謝?&#xff09; <!DOCTYPE html><html><head> <title>木木音樂網第一次注冊表</title></head><body><h2>使用手機號碼注冊</…

C#復習正則表達式

由于前段時間為了寫工具學的太J8粗糙 加上最近一段時間太浮躁 所以靜下心來復習 一遍以前學的很弱的一些地方1 委托 public delegate double weituo(double a, double b);public static double test1(double a,double b){return a * b;}public static double test2(double a,…

使用JPA偵聽器的數據庫加密

最近&#xff0c;我不得不將數據庫加密添加到幾個字段中&#xff0c;并且發現了很多不好的建議。 建筑問題 最大的問題是建筑。 如果持久性管理器悄悄地處理您的加密&#xff0c;那么根據定義&#xff0c;您的體系結構將在持久性和安全性設計之間要求緊密而不必要的綁定。 您…

Java是先難后易嗎_在解決問題的時候,是先難后易還是先易后難?

有家長問&#xff0c;孩子一旦聽到不同聲音&#xff0c;就沮喪&#xff0c;一旦有難的事情&#xff0c;就逃避&#xff0c;怎么辦&#xff1f;回答這個問題之前&#xff0c;我們問一個問題“你給孩子玩穿紐扣游戲&#xff0c;是一開始給孩子玩容易穿的紐扣好呢&#xff1f;還是…

在vue中安裝使用vux

最近因為的工作的原因在弄vue&#xff0c;從后端弄到前端之前一直用js&#xff0c;現在第一次接觸vue感覺還挺有意思的&#xff0c;就是自己太菜了&#xff0c;這個腦子呀。。。。不太夠用。。。。。頁面設計用了一個叫vux的東西&#xff0c;vux可以提供一些組件&#xff0c;用…

form表單 獲取與賦值

form表單中使用頻繁的組件: 文本框、單選框、多選框、下拉框、文本域form通過getValues()獲取表單中所有name的值 通過setValues({key:values})給對應的name值進行賦值&#xff0c;其中key對應的name值 在給單選框和多選框賦值時&#xff0c;有幾個疑惑的地方&#xff1a;  …

Zabbix全方位告警接入-電話/微信/短信都支持

http://www.cnblogs.com/baidu-gaojing/p/5128035.html 百度告警平臺地址&#xff1a; http://gaojing.baidu.com 聯系我們&#xff1a; 郵箱&#xff1a;gaojingbaidu.com 電話&#xff1a;13924600771 QQ群&#xff1a;183806029 對于使用zabbix的用戶&#xff0c;要接入百度…

Spring MVC定制用戶登錄注銷實現示例

這篇文章描述了如何實現對Spring MVC Web應用程序的自定義用戶訪問&#xff08;登錄注銷&#xff09;。 作為前提&#xff0c;建議讀者閱讀這篇文章 &#xff0c;其中介紹了一些Spring Security概念。 該代碼示例可從Spring-MVC-Login-Logout目錄中的Github獲得。 它從帶有注釋…

HTML5與CSS3權威指南筆記案例1

第1章 <!DOCTYPE html> <meta charset "UTF-8"> <title> Search </title> <form> <p><label>Search&#xff1a;<input name"search" autofocus></label> </p> </form> <!DOCTYPE&…

java循環的概念_Java數據結構之循環隊列簡單定義與用法示例

本文實例講述了Java數據結構之循環隊列簡單定義與用法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;一、概述&#xff1a;1、原理&#xff1a;與普通隊列的區別在于循環隊列添加數據時&#xff0c;如果其有效數據end maxSize - 1(最大空間)的話&#xff0c;end指針…

Unrecognized option: -jrockit

weblogic報錯&#xff1a; starting weblogic with Java version: Unrecognized option: -jrockit Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. Starting WLS with line: /data/jdk1.8.0_45/bin/java -jroc…

51nod 1105 第K大的數

基準時間限制&#xff1a;1 秒 空間限制&#xff1a;131072 KB 分值: 40 難度&#xff1a;4級算法題 數組A和數組B&#xff0c;里面都有n個整數。數組C共有n^2個整數&#xff0c;分別是A[0] * B[0],A[0] * B[1] ......A[1] * B[0],A[1] * B[1]......A[n - 1] * B[n - 1]&#x…

在Tomcat上設置和使用Apache Solr

前一陣子花了一點時間來玩Solr&#xff0c;但立即被我們可以在一些更大的數據集上獲得的性能所震撼。 這是我的一些初始設置和配置學習信息&#xff0c;也許可以幫助某人啟動它并更快地運行。 首先在Windows上進行設置。 下載并解壓縮Apache Tomcat和Solr&#xff0c;然后將其復…

sass變量

sass變量用法 1、sass變量必須以$符開頭&#xff0c;后面緊跟著變量名 2、變量值和變量名之間就需要使用冒號(:)分隔開&#xff08;就像CSS屬性設置一樣&#xff09; 3、如果值后面加上!default則表示默認值 默認變量 sass的默認變量&#xff1a;僅需要在值后面加上!defaul…