物件導向設計模式之Facade外觀模式(結構型)

2022-03-07 03:13:38 字數 1661 閱讀 9714

動機:有些系統元件的客戶和元件中各種複雜的子系統有了過多的的耦合,隨著外部客戶程式

和個子系統的演化,這種過多的耦合面臨很多變化的挑戰;如何簡化外部客戶程式和系統的互動介面?

如何將外部客戶程式的演化和內部子系統的變化之間的依賴相互解耦

意圖:為子系統的一組介面提供乙個一致的介面,facade模式定義了了乙個高層介面,這個介面使得這一子系統更加

容易使用

可適用性:

1、當你要為乙個複雜子系統提供乙個簡單介面時。子系統往往因為不斷演化而變得越來越複雜。大多數模式使用時都會

產生更多更小的類。這使得子系統更具可重用性,也更容易對子系統進行定製,但這也給那些不需要定製子系統的用

戶帶來一些使用上的困難。facade可以提供乙個簡單的預設檢視,這一檢視對大多數使用者來說已經足夠,而那

些需要更多的可定製性的使用者可以越過facade層。 

2、客戶程式與抽象類的實現部分之間存在著很大的依賴性。引入facade將這個子系統與客戶以及其他的子系統

分離,可以提高子系統的獨立性和可移植性。 

3、當你需要構建乙個層次結構的子系統時,使用facade模式定義子系統中每層的入口點。如果子系統之間是相

互依賴的,你可以讓它們僅通過facade進行通訊,從而簡化了它們之間的依賴關係。

示例:假設我們需要開發乙個坦克模擬系統用於模擬坦克車在各種作戰環境中的行為,其中坦克系統由引擎、控制器、車輪、車身等各種子系統構成。

**如下:

namespace facade

public void waction2()

}/// /// 引擎

///

public class engine

public void eaction2()

}/// /// 控制器

///

public class controler

public void caction2()

}/// /// 車身

///

public class bodywork

public void baction2()

}/*假設將以上每個類看做是各個子系統的話,下面就用facade模式設計乙個高層的系統*/

/// /// 設計好tankfacade類,這樣就可以將系統解耦,我們使用坦克時並不需要關注其引擎、控制器、車輪、

/// 車身具體怎麼工作的我們只需要知道坦克能做什麼就可以,tankfacade類簡化了客戶程式使用的複雜性

/// ,也同時隱藏了子系的內部實現,以物件組合的方式來達到解耦的目的;雖然子系統和tankfacade同在

/// 乙個dll裡,但客戶程 序只能透過tankfacade類來使用各個子系統的功能

///

public class tankfacade

public void run()

public void shot()

public void stop()}}

設計模式之Facade

facade模式的定義 為子系統中的一組介面提供乙個一致的介面.facade乙個典型應用就是資料庫jdbc的應用,如下例對資料庫的操作 public class dbcompare connection conn null preparedstatement prep null resultset ...

設計模式之Facade

facade模式的定義 為子系統中的一組介面提供乙個一致的介面.facade乙個典型應用就是資料庫jdbc的應用,如下例對資料庫的操作 public class dbcompare catch ception e finally 上例是jsp中最通常的對資料庫操作辦法.在應用中,經常需要對資料庫操作...

設計模式之Facade

facade 模式也叫外觀模式,是由gof提出的23種設計模式中的一種。facade 模式為一組具有類似功能的類群,比如類庫,子系統等等,提供乙個一致的簡單的介面 這個一致的簡單的介面被稱作facade。本文介紹設計模式中的外觀 facade 模式的概念,用法,以及實際應用中怎麼樣使用facade模...