Facade外觀模式 結構性模式

2022-01-14 15:13:53 字數 2480 閱讀 4980

1、系統的複雜度

需求:開發乙個坦克模擬系統用於模擬坦克車在各種作戰環境中的行為,其中坦克系統由引擎、控制器、車輪等各子系統構成.然後由對應的子系統呼叫.

常規的設計如下:

#region 坦克系統組成

//////引擎類

/// public

class

engine

public

void

engineactionb()

}//////

車輪

/// public

class

wheel

public

void

wheelactionb()

}//////

控制器

/// public

class

controller

public

void

controlleractionb()

} #endregion

//////

遊戲系統

/// public

class

gamesystem

}//////

車輪初始化類

/// public

class

wheelinit}}

ok,這是最簡單的實現,完成了遊戲系統對坦克系統的呼叫,將上面的系統呼叫抽象成一張構成圖,如下:

可以發現,坦克系統的各個組成部分,柔和到了遊戲系統的各個型別中,這種設計一旦坦克的組成部分發生變化,所造成的維護成本是十分昂貴的!

2、問題

元件(坦克系統)的客戶端呼叫程式(系統系統)和元件中各種複雜的子系統之間產生了過多的耦合,隨著外部客戶程式和元件各子系統的演化,這種耦合產生的維護成本十分昂貴.

3、解決方案

必須抽象出一層介面,這層介面需要將坦克系統進行抽象,並告訴遊戲客戶端哪些功能,是它可以呼叫的,而不是讓系統系統自己去呼叫坦克系統的元件來實現相關的功能,將元件系統(坦克系統)和外部呼叫客戶程式(遊戲系統)的變化之間的依賴解耦.將這種變化成本交給這層介面來承擔.

#region 坦克系統組成

//////引擎類

/// internal

class

engine

public

void

engineactionb()

}//////

車輪

/// internal

class

wheel

public

void

wheelactionb()

}//////

控制器

/// internal

class

controller

public

void

controlleractionb()

}#endregion

public

class

tankfacade

//////

坦克的停止功能,完成引擎、控制器的停止

/// public

void

stop()

}

客戶端呼叫**如下:

///

///遊戲系統

/// public

class

gamesystem

//////

結束遊戲

/// public

void

stop()

}

通過tankfacade類,將坦克系統的元件整合到裡面,提供給遊戲系統它所需要的功能,很好的實現了客戶端呼叫系統依賴與坦克元件的問題,完成了解耦.解耦後的結構圖如下:

4、要點

(1)、從客戶程式的角度來看,facade模式補不僅簡化了整個元件系統的介面,同時對於元件內部與外部客戶程式來說,達到了一種解耦的效果,內部子系統的變化不會影響到facade介面的變化.

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

(3)、facede模式與apater模式、bridge模式、decorator模式的區別,facede模式注重簡化介面,apater注重轉換介面(將現有介面轉換成客戶需要的介面),bridge模式介面的分離(即系統按照兩個維度及以上的變化適合使用bridge模式),decorator模式注重穩定介面的情況下,為介面擴充套件功能.

設計模式 外觀模式(結構性) 模板模式(結構性)

外觀模式實現的是多各類協作共同完成一件事情,因此我們使用乙個函式來封裝這些操作,將這個函式放在乙個類中 模板模式實現的是乙個類的多個函式組合完成一件事情,雖然類的每個函式可能有不同的實現方式,但是流程是一樣的。因此使用繼承方式,在類中新建乙個函式依次呼叫其他的成員函式。模板模式中將乙個大函式拆分為小...

外觀模式(Facade)

外觀模式的定義是,為子系統中的一組介面提供乙個一致的inte ce介面介面。外觀模式是個很簡單,但很重要的模式,它主要思想是將表現層和邏輯層隔離,封裝底層的複雜處理,只為使用者提供簡單的介面,這樣的例子隨處可見。外觀模式也叫門面模式,它很多時候更是一種系統架構的設計,在我所做的專案中,就實現了門面模...

Facade外觀模式

facade外觀模式,是一種結構型模式,它主要解決的問題是 元件的客戶和元件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和各子系統的演化,這種過多的耦合面臨很多變化的挑戰。facade設計模式更注重從架構的層次去看整個系統,而不是單個類的層次。facade外觀模式,是一種結構型模式,它主要解決...