1. 程式人生 > >設計模式 --外觀模式(Facade)

設計模式 --外觀模式(Facade)

什麼是外觀模式?

外觀模式(Facade),為子系統中的一組介面提供一個一致的介面,定義一個高層介面,這個介面使得這一子系統更加容易使用。

簡單點說:外觀模式是一種使用頻率非常高的結構型設計模式,它通過引入一個外觀角色來簡化客戶端與子系統之間的互動,為複雜的子系統呼叫提供一個統一的入口,降低子系統與客戶端的耦合度,且客戶端呼叫非常方便。

概述:

在真實的應用系統中,一個子系統可能由很多類組成。子系統的客戶為了它們的需要,需要和子系統中的一些類進行互動。客戶和子系統的類進行直接的互動會導致客戶端物件和子系統之間高度耦合。任何的類似於對子系統中類的介面的修改,會對依賴於它的所有的客戶類造成影響。

從上面外觀模式的定義我們看以看到外觀模式能很好的解決上述問題,為子系統提供了一個更高層次、更簡單的介面,從而降低了子系統的複雜度和依賴。這使得子系統更易於使用和管理。

外觀是一個能為子系統和客戶提供簡單介面的類。當正確的應用外觀,客戶不再直接和子系統中的類互動,而是與外觀互動。外觀承擔與子系統中類互動的責任。實際上,外觀是子系統與客戶的介面,這樣外觀模式降低了子系統和客戶的耦合度。

例項:

下面用一個簡單的例子來說明外觀模式:

結構圖:

子系統類通常是一些業務類,實現了一些具體的、獨立的業務功能,其典型程式碼如下:

		class One{
		    public void MethodA(){
		        System.out.println( "methodA--> is runing" );
		    }
		}
		
		class Two{
		    public void MethodB(){
		        System.out.println( "methodB--> is runing" );
		     }
		}
		
		class Three{
		    public void MethodC(){
		        System.out.println( "methodC--> is runing" );
		    }
		}
		
		class Four{
		    public void MethodD(){
		       System.out.println( "methodD--> is runing" );
		    }
		}

在引入外觀類之後,與子系統業務類之間的互動統一由外觀類來完成,在外觀類中通常存在如下程式碼:

		class Facade{
		    private One obj1 = new One();
		    private Two obj2 = new Two();
		    private Three obj3 = new Three();
		    private Four obj4 = new Four();
		
		    public void Method1(){
			System.out.println("方法組1");
		        obj1.MethodA();
		        obj2.MethodB();
		        obj3.MethodC();
		    }
			public void Method2(){
			System.out.println("方法組2");
		        obj1.MethodA();
		        obj2.MethodB();
			obj4.MethodD();
		    }
		}

由於在外觀類中維持了對子系統物件的引用,客戶端可以通過外觀類來間接呼叫子系統物件的業務方法,而無須與子系統物件直接互動。引入外觀類後,客戶端程式碼變得非常簡單,典型程式碼如下:

		class Program{
		    static void Main(string[] args){
		        Facade facade = new Facade();
		        facade.Method1();
			facade.Method2();
		    }
}

何時使用外觀模式?

第一:設計初期階段,有意識的將不同的兩個層分離,層與層之間建立外觀Facade,這樣就可以為複雜的子系統提供一個簡單的介面,耦合性降低。

第二:在開發階段,子系統往往因為不斷的重構演化而變的越來越複雜,增加外觀Facade可以提供一個簡單的介面,減少它們之間的依賴性.

第三:維護一個大型系統時,可能這個系統已經非常難以維護和擴充套件,此時可以為系統新開發一個Facade類,來提供設計粗糙或高度複雜的遺留程式碼的比較清晰簡單介面,讓新系統與Facade物件互動,Facade與遺留程式碼互動所有複雜的工作。

相關推薦

【編程思想】【設計模式】【結構模式Structural】門面模式/外觀模式Facade

pla each serve com pro rep compute source import Python版 https://github.com/faif/python-patterns/blob/master/structural/facade.py #!/

設計模式-外觀模式(facade)

基本概念 外觀模式的作用: 鬆散耦合,外觀模式鬆散了客戶端與子系統的耦合關係,讓子系統內部的模組能更容易擴充套件和維護。 簡單易用,外觀模式讓子系統更加易用,客戶端不再需要了解子系統內部的實現,也不需要跟眾多子系統內部的模組進行互動,只需要跟門面類互動就可以了。

重走Java設計模式——外觀模式Facade Pattern)

外觀模式 定義 外觀模式(Facade Pattern)隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的介面。這種型別的設計模式屬於結構型模式,它向現有的系統新增一個介面,來隱藏系統的複雜性。 這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現有系

23種設計模式-門面模式(外觀模式)Facade

1.產生背景 為什麼需要門面模式 我是一個辛苦一輩子的農民,攢了幾十年錢,現在日子好了,也想建一套屬於自己的小洋樓; 首先,我要僱一個搬磚的和一個和泥的,還要一個會砌牆的人;可是我到哪裡去找這些人,還要一個一個跟他們談價錢;不知道他們和不和得來,會不會幹一半不幹了; 哎,好

設計模式-外觀模式Facade

外觀模式又稱為門面模式,為一組類似功能的叢集,比如類庫、子系統等,提供一致的入口供client呼叫 角色和職責: 1.門面(Facade)-Computer:    外觀模式的核心。它被客戶角色呼叫,它熟悉子系統的功能。內部根據客戶角色的需求預定了幾種功能的組合 2.子系統(Pac

淺談Java設計模式——外觀模式(facade)

一、概述         為子系統中的一組介面提供一個一致的介面,Facade模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。我們都知道類與類之間的耦合越低,那麼可複用性就越好,如果兩個類不必彼此通訊,那麼就不要讓這兩個類發生直接的相互關係,如果需要呼叫裡面的方

設計模式 --外觀模式(Facade)

什麼是外觀模式? 外觀模式(Facade),為子系統中的一組介面提供一個一致的介面,定義一個高層介面,這個介面使得這一子系統更加容易使用。 簡單點說:外觀模式是一種使用頻率非常高的結構型設計模式,它通

設計模式 -- 外觀模式Facade

外觀模式:軟體工程中常用的一種軟體設計模式。它為子系統中的一組介面提供一個統一的高層介面。這一介面使得子系統更加容易使用。 適用於:        客戶端為了避免與複雜的子系統產生耦合而導致隨著子系統的變化而變化。外觀模式就是為了簡化客戶端與子系統之間的介面。 結構如下:

23種設計模式-外觀模式(Facade Pattern)

一、 門面(Facade)模式 外部與一個子系統的通訊必須通過一個統一的門面(Facade)物件進行,這就是門面模式。 醫院的例子 用一個例子進行說明,如果把醫院作為一個子系統,按照部門職能,這個系統可以劃分為掛號、門診、劃價、化驗、收費、取藥等。看病的病人要與這些

設計模式 | 外觀模式/門面模式facade

結構 之前 有意 mina 應該 問題 pack src ack 定義: 為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。 結構:(書中圖,侵刪) 一個簡潔易用的外觀類 一個復雜的子系統 實例: 書中提到了理財

C#設計模式-外觀模式Facade Pattern)

引言 在軟體測試中,一般都是在功能測試穩定的情況下再進行UI自動化測試、或者進行效能測試。如果一個一個進行太麻煩,此時可以使用對外提供一個簡單介面,通過這個介面可以訪問內部一群介面。例如進行UI自動化測試, 那麼執行功能測試後再執行自動化測試。在軟體開發過程中,將對外提供了一個統一的介面,用來訪問子系統中的一

設計模式--外觀模式

通過 stc 我們 使用 客戶端 不同的 test ace log 例如 你到政府部門去辦事情,你需要到部門1辦事情,然後再去部門2去辦事情,後面有了一站式窗口之後,你只需要把表交給一站式窗口。一站式窗口在去部門1和部門2去辦事情,客戶不用和模塊a和b打交道 案例2:

設計模式——外觀模式

觀察者模式 訪問 交互 images 高層 觀察者 建立 我們 系統   外觀模式是軟件工程中常用的一種軟件設計模式。它為子系統中的一組接口提供一個統一的高層接口。這一接口使得子系統更加容易使用。   優點     Facade模式降低了客戶端對子系統使用的復雜性。   

設計模式-外觀模式

優點 訪問 深入 簡化 門面模式 中介 了解 模式 開閉原則 一、定義 定義:又叫門面模式,提供了一個統一的接口,用來訪問子系統中的一群接口 外觀模式定義了一個高層接口,讓子系統更容易使用 類型:結構型 二、使用場景 1、子系統越來越復雜,增加外觀模式提供簡

python設計模式-外觀模式

上一篇《python設計模式-介面卡模式》介紹瞭如何將一個類的介面轉換成另一個符合期望的介面。這一篇將要介紹需要一個為了簡化介面而改變介面的新模式-外觀模式(Facade-Pattern)。 問題 問題:如果你組裝了一套家庭影院,內含播放器、投影機、自動螢幕、立體聲音響、爆米花機等。如何設計一個遙控

大話設計模式-外觀模式

color 依賴 外觀模式 代碼 兩個 sub idt 重構 str 外觀模式 外觀模式為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。 外觀系統完美的體現了依賴倒轉原則和迪米特法則的思想,所以是非常常用的模式之一。

java設計模式--外觀模式(門面模式

簡介: 外觀模式(Facade),他隱藏了系統的複雜性,並向客戶端提供了一個可以訪問系統的介面。這種型別的設計模式屬於結構性模式。為子系統中的一組介面提供了一個統一的訪問介面,這個介面使得子系統更容易被訪問或者使用   角色:     1).

設計模式之門面模式(外觀模式)

門面模式 概念 何時使用 類圖 程式碼例項 概念 當類A和多個類互動時,並且呼叫其方法很亂時,為了降低類之間的耦合性,符合迪米特最少知識法則,專門抽出一個類,並且提供出幾個簡單明瞭的介面給A類,那麼具體的複雜方法呼叫交給此類進行管理,該類就是為門面類。 何時

Android開發之設計模式-外觀模式

外觀模式(Facade Pattern) 定義:外部與一個子系統的通訊必須通過一個統一的外觀物件進行,為子系統中的一組介面提供一個一致的介面,外觀模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。 主要解決:降低訪問複雜系統的內部子系統時的複雜度,簡化客戶端與之

C#設計模式-外觀模式

using System; using System.Collections.Generic; namespace TestCS { class Program { static void Main(string[] args) {