23種設計模式(8) 外觀模式

2021-08-13 17:02:58 字數 1512 閱讀 7421

定義:

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

角色:

1,外觀(facade)角色 :客戶端可以呼叫這個角色的方法。此角色知曉相關子系統的功能和責任。在正常情況下,本角色會將所有從客戶端發來的請求委派到相應的子系統去。

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

示例:

1,子系統角色,由若干個類組成

public class subclass1     

public void method2() }

public class subclass2    

public void method2() }

public class subclass3    

public void method2() }

2,外觀角色類

public class facadeclass  }

3,客戶端測試方法

public class clientclass 

}

facade類其實相當於子系統中subclass類的外觀介面,有了這個facade類,那麼客戶端就不需要親自呼叫子系統中的那些具體實現的子類了,也不需要知道系統內部的實現細節,甚至都不需要知道這些子類的存在,客戶端只需要跟facade類互動就好了,從而更好地實現了客戶端和子系統中具體類的解耦,讓客戶端更容易地使用系統。

同時,這樣定義乙個facade類可以有效地遮蔽內部的細節,免得客戶端去呼叫module類時,發現一些不需要它知道的方法。如上**,我的所有子類中的方法二都是方法一呼叫的方法,是配合方法一的,他們不需要被客戶端呼叫,而且具有一定的保密性,這樣使用外觀模式時就可以不被客戶端知道。

優點:

實現了子系統與客戶端之間的松耦合關係。

客戶端遮蔽了子系統元件,減少了客戶端所需處理的物件數目,並使得子系統使用起來更加容易。

適用場景:

設計初期階段,應該有意識的將不同層分離,層與層之間建立外觀模式。

開發階段,子系統越來越複雜,增加外觀模式提供乙個簡單的呼叫介面。

維護乙個大型遺留系統的時候,可能這個系統已經非常難以維護和擴充套件,但又包含非常重要的功能,為其開發乙個外觀類,以便新系統與其互動。

外觀模式總結:

1、外觀模式為複雜子系統提供了乙個簡單介面,並不為子系統新增新的功能和行為。

2、外觀模式實現了子系統與客戶端之間的松耦合關係。 

3、外觀模式沒有封裝子系統的類,只是提供了簡單的介面。 如果應用需要,它並不限制客戶使用子系統類。因此可以靈活的在系統易用性與通用性之間選擇。

4、外觀模式注重的是簡化介面,它更多的時候是從架構的層次去看整個系統,而並非單個類的層次。

23種設計模式 外觀模式

隨著軟體的開發,元件的客戶和元件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和各子系統的演化,這種過多的耦合面臨很多變化的挑戰。如何簡化外部客戶程式和系統間的互動介面?如何將外部客戶程式的演化和內部子系統的變化之間的依賴相互解耦?為子系統中的一組介面提供乙個一致 穩定 的介面,門面模式定義了乙...

23種設計模式(9)外觀模式

外觀模式是為了解決類與類之家的依賴關係的,降低了類類之間的耦合度,該模式中沒有涉及到介面 1 建立多個類 public class cpu public void shutdown public class memory public void shutdown public class disk ...

23種java設計模式之外觀模式

今天,我們就用乙個家庭影院專案來說明外觀模式。家庭影院的專案分析 對於每乙個物件,我們結合單例模式來做,因為這種系統每乙個物理實體其實都是乙個物件,不用new什麼的來完成,他進來本身就是乙個物件,物理實體直接單例就行了 接下來我給出某幾個物件的 其他的就一樣的,就不必一一給出了 燈光類 theate...