程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#設計模式之門面設計模式(Facade)(1)

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

編輯:關於C語言

一、門面(Facade)模式

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

醫院的例子

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

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

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

什麼是門面模式

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

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

二、門面模式的結構

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

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved