外觀設計模型

2021-06-05 12:42:53 字數 1505 閱讀 7414

**:

facade外觀模式,是一種結構型模式,它主要解決的問題是:元件的客戶和元件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和各子系統的演化,這種過多的耦合面臨很多變化的挑戰。在這裡我想舉乙個例子:比如,現在有一輛汽車,我們(客戶程式)要啟動它,那我們就要發動引擎(子系統1),使四個車輪(子系統2)轉動。但是實際中我們並不需要用手推動車輪使其轉動,我們踩下油門,此時汽車再根據一些其他的操作使車輪轉動。油門就好比系統給我們留下的介面,不論汽車是以何種方式轉動車輪,車輪變化成什麼牌子的,我們要開走汽車所要做的還是踩下油門。

gof《設計模式》中說道:為子系統中的一組介面提供乙個一致的介面,facade模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。

façade外觀模式的結構大概是這樣的:

我就上面說的那個情形寫一下實現**,首先我們要實現三個子系統(wheel、engine、body):

internal

class

engine

public

string enginestop()

}internal

class

wheel

public

string wheelstop()

}internal

class

body }

}然後,我們再來實現汽車的facade

class

ca***cade }

public

void stop()}}

現在我們來使用客戶端程式驗證一下,**如下:

class

program }

執行結果如下;

bmw's engine is working

bmw's wheel is circumrotating

bmw's wheel is circumrotating

bmw's wheel is circumrotating

bmw's wheel is circumrotating

bmw's engine is stoped

bmw's wheel is stoped

bmw's wheel is stoped

bmw's wheel is stoped

bmw's wheel is stoped

正如上面所說:客戶端**(program)不需要關心子系統,它只需要關心ca***cade所留下來的和外部互動的介面,而子系統是在ca***cade中聚合。

façade模式的幾個要點:

1、從客戶程式的角度看,facade模式不僅簡化了整個元件系統的介面,同時對於元件內部與外部客戶程式來說,從某種程度上也達到了一種「解耦」的效果——內部子系統的任何變化不會影響到facade介面的變化。

2、facade設計模式更注重從架構的層次去看整個系統,而不是單個類的層次。facade很多時候更是一種架構設計模式。

外觀設計模式

外觀模式 facade pattern 門面模式,隱藏系統的複雜性,並向客戶端提供了乙個客戶端可以訪問系統的介面。這種型別的設計模式屬於結構型模式,它向現有的系統新增乙個介面,來隱藏系統的複雜性。這種模式涉及到乙個單一的類,該類提供了客戶端請求的簡化方法和對現有系統類方法的委託呼叫。使用場景 我們需...

設計模式 外觀設計模式

外觀設計模式 facade 又稱為門面設計模式。很好理解,先來舉個例子 一位病人去醫院看病,他要去 然後檢查,取藥,醫院是乙個大系統,而病人需要和每乙個子部門去打交道。比較麻煩。而如果使用門面設計模式,就是在醫院設定乙個接待員,由接待員來幫助病人分別去和各個部門打交道。如下 門面設計模式就是這麼簡單...

js設計模式 外觀設計模式

外部與乙個子系統的通訊必須通過乙個統一的門面 facade 物件進行,這就是門面模式。外觀模式為子系統提供了統一的介面,遮蔽了子類的不同 現代大型軟體發展到一定程度會非常複雜,於是就需要對軟體進行模組化開發,將系統分成各個模組,有利於維護和拓展,但即使這樣在我們呼叫的時候依然要和許多類打交道,依然很...