C#設計模式之門面設計模式(Facade)

來源:互聯網
上載者:User

一、門面(Facade)模式

外部與一個子系統的通訊必須通過一個統一的門面(Facade)對象進行,這就是門面模式。

醫院的例子

用一個例子進行說明,如果把醫院作為一個子系統,按照部門職能,這個系統可以劃分為挂號、門診、劃價、化驗、收費、取藥等。看病的病人要與這些部門打交道,就如同一個子系統的用戶端與一個子系統的各個類打交道一樣,不是一件容易的事情。

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

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

什麼是門面模式

門面模式要求一個子系統的外部與其內部的通訊必須通過一個統一的門面(Facade)對象進行。門面模式提供一個高層次的介面,使得子系統更便於使用。

就如同醫院的接待員一樣,門面模式的門面類將用戶端與子系統的內部複雜性分隔開,使得用戶端只需要與門面對象打交道,而不需要與子系統內部的很多個物件打交道。

二、門面模式的結構

門面模式是對象的結構模式。門面模式沒有一個一般化的類圖描述,下圖示範了一個門面模式的示意性對象圖:

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

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

子系統(subsystem)角色:可以同時有一個或者多個子系統。每一個子系統都不是一個單獨的類,而是一個類的集合。每一個子系統都可以被用戶端直接調用,或者被門面角色調用。子系統並不知道門面的存在,對於子系統而言,門面僅僅是另外一個用戶端而已。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.