设计模式---接口隔离模式之门面模式(Façade)
生活随笔
收集整理的這篇文章主要介紹了
设计模式---接口隔离模式之门面模式(Façade)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前提:接口隔離模式
在組建構建過程中,某些接口之間直接的依賴常常會帶來很多問題、甚至根本無法實現。采用添加一層間接接口(穩定的),來隔離本來相互緊密關聯的接口是一種常見的解決方案。典型模式:
門面模式:Fa?ade, 代理模式:Proxy, 適配器模式:Adapter, 中介者模式:Mediator一:門面模式(外觀模式)
推文:外觀模式 Facade Pattern
(一)概念
Facade模式也叫外觀模式,是由GoF提出的23種設計模式中的一種。Facade模式為一組具有類似功能的類群,比如類庫,子系統等等,提供一個一致的簡單的界面。這個一致的簡單的界面被稱作facade。 為子系統中統一一套接口
(二)動機
上述方案A的問題在于組件的客戶和組件中的各種復雜的子系統有了過多的耦合,隨著外部客戶程序和子系統的演化,這種過多的耦合面臨很多變化的挑戰。 如何簡化外部客戶程序和系統間的交互接口?如何將外部客戶程序的演化和內部子系統的變化之間的依賴相互解耦。(三)系統間耦合的復雜度
(四)模式定義
為子系統中的一組接口提供一個一致(穩定)的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用(復用)。 --《設計模式》Gof(五)結構(沒有特定的模式)
不同場景,變化相差較大(六)要點總結:?(將子系統的變化限制在一個范圍內)
1.從客戶程序的角度來看, Fa?ade 模式簡化了整個組件系統的接口。對于內部和外部客戶程序來說, Fa?ade 模式實現了一種解耦的效果——即內部的子系統的任何變化不會影響到 Fa?ade 接口的變化。
2.Fa?ade 設計模式更注重從架構的層次去看待整個系統,而不是單個類的層次。Fa?ade 很多時候更是一種架構設計模式。
3.Fa?ade 設計模式并非是一個集裝箱,可以任意的放入任何多個對象。Facade模式中組件的內部應該是“相互耦合關系比較大的一系列組件”,而不是簡單的功能集合,以便能夠實現松耦合,高內聚的特性。
(七)案例實現:子系統接口統一
#include <iostream> using namespace std;//子系統組成,各個部分關系較大的一系列組件 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() //接口提供穩定,降低耦合,提高內聚{ //統一接口中沒有必須按照某種步驟,不要把建造者模式混淆a->doThing();b->doThing();c->doThing();} }; void main() {Facade* f = new Facade();f->doThing();delete f;system("pause");return; }(七)案例實現:基金購買方案
#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; }?
轉載于:https://www.cnblogs.com/ssyfj/p/9540458.html
總結
以上是生活随笔為你收集整理的设计模式---接口隔离模式之门面模式(Façade)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#金额转换成中文大写金额
- 下一篇: 简化Redis数据访问代码RedisTe