设计模式---接口隔离模式之门面模式(Façade)
生活随笔
收集整理的這篇文章主要介紹了
设计模式---接口隔离模式之门面模式(Façade)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前提:接口隔離模式
在組建構(gòu)建過程中,某些接口之間直接的依賴常常會帶來很多問題、甚至根本無法實(shí)現(xiàn)。采用添加一層間接接口(穩(wěn)定的),來隔離本來相互緊密關(guān)聯(lián)的接口是一種常見的解決方案。典型模式:
門面模式:Fa?ade, 代理模式:Proxy, 適配器模式:Adapter, 中介者模式:Mediator一:門面模式(外觀模式)
推文:外觀模式 Facade Pattern
(一)概念
Facade模式也叫外觀模式,是由GoF提出的23種設(shè)計模式中的一種。Facade模式為一組具有類似功能的類群,比如類庫,子系統(tǒng)等等,提供一個一致的簡單的界面。這個一致的簡單的界面被稱作facade。 為子系統(tǒng)中統(tǒng)一一套接口
(二)動機(jī)
上述方案A的問題在于組件的客戶和組件中的各種復(fù)雜的子系統(tǒng)有了過多的耦合,隨著外部客戶程序和子系統(tǒng)的演化,這種過多的耦合面臨很多變化的挑戰(zhàn)。 如何簡化外部客戶程序和系統(tǒng)間的交互接口?如何將外部客戶程序的演化和內(nèi)部子系統(tǒng)的變化之間的依賴相互解耦。(三)系統(tǒng)間耦合的復(fù)雜度
(四)模式定義
為子系統(tǒng)中的一組接口提供一個一致(穩(wěn)定)的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用(復(fù)用)。 --《設(shè)計模式》Gof(五)結(jié)構(gòu)(沒有特定的模式)
不同場景,變化相差較大(六)要點(diǎn)總結(jié):?(將子系統(tǒng)的變化限制在一個范圍內(nèi))
1.從客戶程序的角度來看, Fa?ade 模式簡化了整個組件系統(tǒng)的接口。對于內(nèi)部和外部客戶程序來說, Fa?ade 模式實(shí)現(xiàn)了一種解耦的效果——即內(nèi)部的子系統(tǒng)的任何變化不會影響到 Fa?ade 接口的變化。
2.Fa?ade 設(shè)計模式更注重從架構(gòu)的層次去看待整個系統(tǒng),而不是單個類的層次。Fa?ade 很多時候更是一種架構(gòu)設(shè)計模式。
3.Fa?ade 設(shè)計模式并非是一個集裝箱,可以任意的放入任何多個對象。Facade模式中組件的內(nèi)部應(yīng)該是“相互耦合關(guān)系比較大的一系列組件”,而不是簡單的功能集合,以便能夠?qū)崿F(xiàn)松耦合,高內(nèi)聚的特性。
(七)案例實(shí)現(xiàn):子系統(tǒng)接口統(tǒng)一
#include <iostream> using namespace std;//子系統(tǒng)組成,各個部分關(guān)系較大的一系列組件 class SystemA { public:void doThing(){cout << "systemA do..." << endl;} };class SystemB { public:void doThing(){cout << "SystemB do..." << endl;} };class SystemC { public:void doThing(){cout << "SystemC do..." << endl;} }; class Facade { private:SystemA* a;SystemB* b;SystemC* c; public:Facade(){a = new SystemA();b = new SystemB();c = new SystemC();}~Facade(){delete[] a;delete[] b;delete[] c;}void doThing() //接口提供穩(wěn)定,降低耦合,提高內(nèi)聚{ //統(tǒng)一接口中沒有必須按照某種步驟,不要把建造者模式混淆a->doThing();b->doThing();c->doThing();} }; void main() {Facade* f = new Facade();f->doThing();delete f;system("pause");return; }(七)案例實(shí)現(xiàn):基金購買方案
#include <iostream> using namespace std;class Fund { public:virtual void purchase() = 0;virtual ~Fund(){} };class ForeignExchange :public Fund { public:virtual void purchase(){cout << "purchase foreign exchange" << endl;} };class Futures :public Fund { public:virtual void purchase(){cout << "purchase futures" << endl;} };class Shares :public Fund { public:virtual void purchase(){cout << "purchase shares" << endl;} };class NationalDebt :public Fund { public:virtual void purchase(){cout << "purchase national debt" << endl;} }; class PurFacade { private:ForeignExchange* fe;Shares* s;Futures* f;NationalDebt* nd; public:PurFacade(){fe = new ForeignExchange();s = new Shares();f = new Futures();nd = new NationalDebt();}void Interface1(){fe->purchase();s->purchase();}void Interface2(){fe->purchase();f->purchase();}void Interface3(){fe->purchase();nd->purchase();}//...多種接口 }; void main() {PurFacade* pf = new PurFacade();pf->Interface1();pf->Interface3();system("pause");return; }?
轉(zhuǎn)載于:https://www.cnblogs.com/ssyfj/p/9540458.html
總結(jié)
以上是生活随笔為你收集整理的设计模式---接口隔离模式之门面模式(Façade)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#金额转换成中文大写金额
- 下一篇: JAVA基础知识总结8(设计模式)