設計模式(10) 外觀 Facade

2021-08-10 08:32:43 字數 2590 閱讀 9932

目錄:

設計模式學習筆記首頁

設計模式(1)——抽象工廠 abstractfactory

設計模式(2)——生成器 builder

設計模式(3)——工廠方法 factory method

設計模式(4)——原型 prototype

設計模式(5)——單例 singleton

設計模式(6)——介面卡 adapter

設計模式(7)——橋接 bridge

設計模式(8)——組合 composite

設計模式(9)——裝飾 decorator

設計模式(10)——外觀 facade

設計模式(11)——享元 flyweight

設計模式(12)——** proxy

設計模式(13)——職責鏈 chain of responsibility

設計模式(14)——命令 command

設計模式(15)——直譯器 interpreter

設計模式(16)——迭代器 iterator

設計模式(17)——中介者 mediator

設計模式(18)——備忘錄 memento

設計模式(19)——觀察者 observer

設計模式(20)——狀態 state

設計模式(21)——策略 strategy

設計模式(22)——模板方法 template method

設計模式(23)——訪問者 visitor

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

當你要為乙個複雜子系統提供乙個簡單介面時。

客戶程式與抽象類的實現部分之間存在著很大的依賴性。

當你需要構建乙個層次結構的子系統時,使用 facade 模式定義子系統中每層的入口點。如果子系統之間是相互依賴的,你可以讓它們僅通過 facade 進行通訊,從而簡化了它們之間的依賴關係。

客戶端不再需要關注例項化時應該使用哪個實現類,直接呼叫 facade 提供的方法就可以了,因為 facade 類提供的方法的方法名對於客戶端來說已經很友好了。

很明顯可以看出外觀模式的中間層就是在客戶和複雜的子系統之間提供了一套簡潔的介面,讓客戶對子系統的了解程度和耦合達到最小。在外觀模式中也不會限制客戶直接使用子系統類,但這會增加耦合性,所以需要在系統的易用性的可擴充套件性之間作出取捨。

facade 外觀模式與 adapter 介面卡模式有點像,它們都提供了乙個中間層,中間層負責封裝了一些物件,然後提供了一套介面,做的事情簡直一模一樣!細想,這兩個模式的結構確實是基本上一致的,但是它們的目的卻完全不一樣。介面卡模式的目的是為了相容新模組和老系統,而加入中間層做適配。而外觀模式的目的是為了降低系統使用某個外接系統的成本和耦合。再看看設計模式的定義————「每乙個模式描述了乙個在我們周圍不斷重**生的問題,以及該問題的解決方案的核心」。也就是說設計模式是由兩部分組成的,即它描述的問題以及解決方案。兩個設計模式的解決方案可能是相同的,甚至可以說所有設計模式的解決方案都是相同的(新增中間層),但是所有設計模式描述的問題絕對是不相同的。還有其它很多設計模式,感覺它們的解決方案(類圖)很相似,這個時候就得想想這些設計模式的出發點————它們描述的是個什麼問題?

編寫子系統類subsystem1subsystem2等,各子系統都有自己的函式operation編寫外觀類facade,has-asubsystem1、subsystem2等,

通過facade建構函式初始化 subsystem1 和 subsystem2 物件

facade.h

// facade.h

#pragma once

class subsystem1 ;

class subsystem2 ;

class facade ;

facade.cpp
// facade.cpp

#include "facade.h"

#include

using

namespace::std;

subsystem1::subsystem1() {}

subsystem1::~subsystem1() {}

void subsystem1::operation()

subsystem2::subsystem2() {}

subsystem2::~subsystem2() {}

void subsystem2::operation()

facade::facade()

facade::~facade()

this->_subs1->operation();

this->_subs2->operation();

}

main.cpp
// main.cpp

#include "facade.h"

#include

using

namespace::std;

int main(int argc, char* argv)

外觀 Facade)設計模式

實在是不知道關於設計模式這個問題怎麼總結,因為看書遇到了,使用外觀設計模式的問題!這裡就順帶著說些吧!我就不明確定義了,這個模式在很多框架中都會使用 首先就是顧名思義,外觀 假設我們有個收音機吧,我做了這個收音機,目的是讓使用者聽,但是我不想讓你知道系統中的細節,或者是系統中的很多細節對於乙個使用者...

設計模式 外觀模式(Facade)

外觀模式是為了解決類與類之家的依賴關係的,像spring一樣,可以將類和類之間的關係配置到配置檔案中,而外觀模式就是將他們的關係放在乙個facade類中,降低了類類之間的耦合度,該模式中沒有涉及到介面。我們以乙個計算機的啟動過程為例 cpu類 public class cpu public void...

設計模式 外觀 Facade 模式

insus.net在去年有寫過一篇 軟體研發公司,外觀設計模式 facade 例中寫得過於簡單與抽象。沒有實質內容似的。這次想再寫乙個。希望能再次加強。為子系統中的一組介面提供乙個統一的高層介面,使客戶使用子系統更容易這是外觀 facade 模式的精髓。在實現之前,可以先看看這篇 web控制項文字框...