在現實生活中,常常存在辦事較複雜的例子,如辦房產證或註冊一家公司,有時要同多個部門聯絡,這時要是有乙個綜合部門能解決一切手續問題就好了。
軟體設計也是這樣,當乙個系統的功能越來越強,子系統會越來越多,客戶對系統的訪問也變得越來越複雜。這時如果系統內部發生改變,客戶端也要跟著改變,這違背了「開閉原則」,也違背了「迪公尺特法則」,所以有必要為多個子系統提供乙個統一的介面,從而降低系統的耦合度,這就是外觀模式的目標。
外觀(facade)模式又叫作門面模式,是一種通過為多個複雜的子系統提供乙個一致的介面,而使這些子系統更加容易被訪問的模式。該模式對外有乙個統一介面,外部應用程式不用關心內部子系統的具體細節,這樣會大大降低應用程式的複雜度,提高了程式的可維護性。
在日常編碼工作中,我們都在有意無意的大量使用外觀模式。只要是高層模組需要排程多個子系統(2個以上的類物件),我們都會自覺地建立乙個新的類封裝這些子系統,提供精簡的介面,讓高層模組可以更加容易地間接呼叫這些子系統的功能。尤其是現階段各種第三方sdk、開源類庫,很大概率都會使用外觀模式。
優點
缺點
外觀(facade)模式的結構比較簡單,主要是定義了乙個高層介面。它包含了對各個子系統的引用,客戶端可以通過它訪問各個子系統的功能。現在來分析其基本結構和實現方法。
模式的結構
外觀(facade)模式包含以下主要角色。
其結構圖如下圖所示:
模式的實現
外觀角色
//class facade
}
系統角色
class
subsystem01
}class
subsystem02
}class
subsystem03
}
程式執行結果如下:
子系統01的method1
()被呼叫!
子系統02的method2
()被呼叫!
子系統03的method3
()被呼叫!
結構型模式之外觀模式
外觀模式 facade 外觀模式是為了解決類與類之家的依賴關係的,像spring 一樣,可以將類和類之間的關係配置到配置 檔案中,而外觀模式就是將他們的關係放在乙個facade 類中,降低了類類之間的耦合度,該模式中沒 有涉及到介面,看下類圖 我們以乙個計算機的啟動過程為例 我們先看下實現類 pub...
結構型模式之外觀模式
1 外觀模式產生的原因 在軟體開發過程中,程式一般會越做越大,而這樣系統中類及子系統之間的影響會使彼此間的關係變得錯綜複雜即過多的耦合,這就導致了隨著系統中類或子系統發生變化,與之相關聯的子系統或類就需要發生變化。2 外觀模式的定義 外觀模式 facade pattern 就是為子系統中的一組介面提...
結構型模式之外觀模式實現
外觀模式為一組具有類似功能的類群,比如類庫 子系統等等,提供乙個一致的簡單的介面。這個一致的介面被稱作外觀。facade 為呼叫方,定義簡單的呼叫介面 clients 呼叫者。通過facade介面呼叫提供某功能的內部類群 packages 功能提供者。指提供功能的類群 模組或子系統 適用於 為子系統...