读《大话设计模式》---外观模式(Facade)
来源:互联网 发布:全网举报 淘宝 编辑:程序博客网 时间:2024/06/05 04:50
外观模式:
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得一个子系统更加容易使用
外观模式结构图
外观模式的一般实现方法:
- #include <iostream>
- using namespace std;
- class SubSystemOne
- {
- public:
- void MethodOne()
- {
- cout << " 子系统方法一" << endl;
- }
- };
- class SubSystemTwo
- {
- public:
- void MethodTwo()
- {
- cout << " 子系统方法二" << endl;
- }
- };
- class SubSystemThree
- {
- public:
- void MethodThree()
- {
- cout << " 子系统方法三" << endl;
- }
- };
- class SubSystemFour
- {
- public:
- void MethodFour()
- {
- cout << " 子系统方法四" << endl;
- }
- };
- //外观类,它需要了解所有子系统的方法和属性,进行组合,以备外界使用。
- class Facade
- {
- private:
- SubSystemOne * one;
- SubSystemTwo * two;
- SubSystemThree * three;
- SubSystemFour * four;
- public:
- Facade()
- {
- one = new SubSystemOne();
- two = new SubSystemTwo();
- three = new SubSystemThree();
- four = new SubSystemFour();
- }
- ~Facade()
- {
- delete one;
- delete two;
- delete three;
- delete four;
- }
- void MethodA()
- {
- cout << "/n方法组A() ---- " << endl;
- one->MethodOne();
- two->MethodTwo();
- four->MethodFour();
- }
- void MethodB()
- {
- cout << "/n方法组B() ---- " << endl;
- two->MethodTwo();
- three->MethodThree();
- }
- };
- //由于Facade的存在,客户端根本不需要知道子系统的存在
- int main()
- {
- Facade * facade = new Facade();
- facade->MethodA();
- facade->MethodB();
- delete facade;
- return 0;
- }
Facade模式的具体实现
- //投资基金代码
- #include <iostream>
- using namespace std;
- //股票1
- class Stock1
- {
- //卖股票
- public:
- void Sell()
- {
- cout << " 股票1卖出" << endl;
- }
- //买股票
- void Buy()
- {
- cout << " 股票1买入" << endl;
- }
- };
- //股票2
- class Stock2
- {
- //卖股票
- public:
- void Sell()
- {
- cout << " 股票2卖出" << endl;
- }
- //买股票
- void Buy()
- {
- cout << " 股票2买入" << endl;
- }
- };
- //股票3
- class Stock3
- {
- //卖股票
- public:
- void Sell()
- {
- cout << " 股票3卖出" << endl;
- }
- //买股票
- void Buy()
- {
- cout << " 股票3买入" << endl;
- }
- };
- //国债1
- class NationalDebt1
- {
- //卖国债
- public:
- void Sell()
- {
- cout << " 国债1卖出" << endl;
- }
- //买国债
- void Buy()
- {
- cout << " 国债1买入" << endl;
- }
- };
- //房地产1
- class Realty1
- {
- //卖房地产
- public:
- void Sell()
- {
- cout << " 房产1卖出" << endl;
- }
- //买房地产
- void Buy()
- {
- cout << " 房产1买入" << endl;
- }
- };
- class Fund
- {
- private:
- Stock1 * gu1;
- Stock2 * gu2;
- Stock3 * gu3;
- NationalDebt1 * nd1;
- Realty1 * rt1;
- public:
- Fund()
- {
- gu1 = new Stock1();
- gu2 = new Stock2();
- gu3 = new Stock3();
- nd1 = new NationalDebt1();
- rt1 = new Realty1();
- }
- ~Fund()
- {
- delete gu1;
- delete gu2;
- delete gu3;
- delete nd1;
- delete rt1;
- }
- void BuyFund()
- {
- gu1->Buy();
- gu2->Buy();
- gu3->Buy();
- nd1->Buy();
- rt1->Buy();
- }
- void SellFund()
- {
- gu1->Sell();
- gu2->Sell();
- gu3->Sell();
- nd1->Sell();
- rt1->Sell();
- }
- };
- int main()
- {
- Fund * fund = new Fund();
- fund->BuyFund();
- fund->SellFund();
- delete fund;
- return 0;
- }
何时使用外观模式:
1.在设计阶段初期,要有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。
2.在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂。增加外观Facade可以提供一个简单的接口,减少它们之间的依赖
3.在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,可以为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。
- 读《大话设计模式》---外观模式(Facade)
- 读《大话设计模式》---外观模式(Facade)
- 设计模式-外观模式(facade pattern)
- 大话设计模式十二:外观模式(facade)
- 大话设计模式--外观模式 Facade -- C++实现实例
- 《大话设计模式》--牛市股票还会亏钱?--外观模式<Facade>(12)
- 设计模式 - 外观(Facade)
- Facade(外观)设计模式
- 设计模式-Facade模式
- 设计模式--外观模式(Facade)
- 设计模式 外观(Facade)模式
- [设计模式]Facade外观模式
- [设计模式]外观模式(Facade)
- 设计模式 -- 外观模式Facade
- 设计模式--- 外观(Facade)模式
- 设计模式 --外观模式(Facade)
- 设计模式:外观模式-facade
- 大话设计模式-外观模式
- jquery的两种重要的方法以及data方法缓存数据详解
- ADI最新资料大全
- hdu 1208 Pascal's Travels (DP记忆化搜索)
- 常量
- FLASH CS电子教程
- 读《大话设计模式》---外观模式(Facade)
- 无论你是中文,还是英文,抑或是特殊符号,请自动换行吧
- 【二叉树遍历】有前序遍历 和 中序遍历 求 后序遍历
- 什么是SMP系统
- 制作嵌入式根文件系统(常见问题详解)
- reference和pointer的区别
- 禁用/启用触控板
- 2013寒假SD高校ACM周赛3(SDUT)
- 史上功能完整强大的android下载管理器