外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,时刻这一子系统更加容易使用。
使用场景:首先,在设计初期阶段,应该要有意识的将不同的两个层分离。比如经典的三层结构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观的Facade。其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用它们的用户程序带来了使用上的困难,增加Facade可以提供一个简单的接口,减少他们之间的依赖。第三,在维护一个遗留的大系统是,可能这个系统已经非常难以维护和扩展了,但因为它包含非常重要的功能,新的需求开发必需要依赖他。此时使用外观模式是非常合适的。
#ifndef FACADE_H #define FACADE_H #include<iostream> using namespace std; class Stock1 { public: void Buy(){ cout << "买入股票1\n"; } void Sell(){ cout << "卖出股票1\n"; } }; class Stock2 { public: void Buy(){ cout << "买入股票2\n"; } void Sell(){ cout << "卖出股票2\n"; } }; class Stock3 { public: void Buy(){ cout << "买入股票3\n"; } void Sell(){ cout << "卖出股票3\n"; } }; class NationalDebt1 { public: void Buy(){ cout << "买入国债1\n"; } void Sell(){ cout << "卖出国债1\n"; } }; class Reality1 { public: void Buy(){ cout << "买入房地产1\n"; } void Sell(){ cout << "卖出房地产1\n"; } }; class Fund { Stock1 st1; Stock2 st2; Stock3 st3; NationalDebt1 Nd; Reality1 Re; public: void Buy() { st1.Buy(); st2.Buy(); st3.Buy(); Nd.Buy(); Re.Buy(); } void Sell() { st1.Sell(); st2.Sell(); st3.Sell(); Nd.Sell(); Re.Sell(); } }; #endif
#include"Facade.h" int main() { Fund Fd; Fd.Buy(); Fd.Sell(); return 0; }
原文地址:http://blog.csdn.net/shiwazone/article/details/45649765