《JAVA與模式》之門面模式

來源:互聯網
上載者:User
文章目錄
  • 原始碼

在閻宏博士的《JAVA與模式》一書中開頭是這樣描述門面(Facade)模式的:

  門面模式是對象的結構模式,外部與一個子系統的通訊必須通過一個統一的門面對象進行。門面模式提供一個高層次的介面,使得子系統更便於使用。

 

醫院的例子

  現代的軟體系統都是比較複雜的,設計師處理複雜系統的一個常見方法便是將其“分而治之”,把一個系統劃分為幾個較小的子系統。如果把醫院作為一個子系統,按照部門職能,這個系統可以劃分為挂號、門診、劃價、化驗、收費、取藥等。看病的病人要與這些部門打交道,就如同一個子系統的用戶端與一個子系統的各個類打交道一樣,不是一件容易的事情。

  首先病人必須先挂號,然後門診。如果醫生要求化驗,病人必須首先劃價,然後繳費,才可以到化驗部門做化驗。化驗後再回到門診室。

  

  描述的是病人在醫院裡的體驗,圖中的方框代表醫院。

  解決這種不便的方法便是引進門面模式,醫院可以設定一個接待員的位置,由接待員負責代為挂號、劃價、繳費、取藥等。這個接待員就是門面模式的體現,病人只接觸接待員,由接待員與各個部門打交道。

  

門面模式的結構

  門面模式沒有一個一般化的類圖描述,最好的描述方法實際上就是以一個例子說明。

  

  由於門面模式的結構圖過於抽象,因此把它稍稍具體點。假設子系統內有三個模組,分別是ModuleA、ModuleB和ModuleC,它們分別有一個樣本方法,那麼此時樣本的整體結構圖如下:

  

  在這個對象圖中,出現了兩個角色:

  ●  門面(Facade)角色 :用戶端可以調用這個角色的方法。此角色知曉相關的(一個或者多個)子系統的功能和責任。在正常情況下,本角色會將所有從用戶端發來的請求委派到相應的子系統去。

  ●  子系統(SubSystem)角色 :可以同時有一個或者多個子系統。每個子系統都不是一個單獨的類,而是一個類的集合(如上面的子系統就是由ModuleA、ModuleB、ModuleC三個類組合而成)。每個子系統都可以被用戶端直接調用,或者被門面角色調用。子系統並不知道門面的存在,對於子系統而言,門面僅僅是另外一個用戶端而已。

原始碼

  子系統角色中的類:

public class ModuleA {
//示意方法
public void
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.