(八)外观模式
2016-02-16 15:49
162 查看
权威定义:外观模式(facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[DP]
定义不是很容易理解,下面结合UML和例子来理解吧~~
下面根据大话设计模式的说法,举个例子。先看源码:
输出:
这里的Stock1等,代表的是子系统类,fund基金类代表的是Facade类,既是外观类,这样客户端只需关注fund类就行了,实际上这也是一个日用而不知的设计模式。那么什么场景下使用此设计模式呢?这才是关键,因为这个模式本身不难。
应用场景:
1.经典的三层架构,层与层之间就可以建立外观,这样可以屏蔽复杂的子系统,降低耦合。
2.重构过程中也经常用到,子系统不断重构越加复杂,可以增加外观,减少依赖。
3.再在一个遗留的大型系统上做开发时,可能这个系统已经难以维护和扩展了,为新系统开发一个外观,原来维护老系统的人实现外观需要调用的接口,可以更好的分工合作,因为开发新系统的人,只需关注外观接口就行了。
定义不是很容易理解,下面结合UML和例子来理解吧~~
下面根据大话设计模式的说法,举个例子。先看源码:
// Facade.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <cmath> #include <memory> using namespace std; class Stock1 { public: void Sell(){cout << "股票 1 卖出" << endl;} void Buy(){cout << "股票 1 买入" << endl;} }; class Stock2 { public: void Sell(){cout << "股票 2 卖出" << endl;} void Buy(){cout << "股票 2 买入" << endl;} }; class Stock3 { public: void Sell(){cout << "股票 3 卖出" << endl;} void Buy(){cout << "股票 3 买入" << endl;} }; class NationalDebt1 { public: void Sell(){cout << "国债 1 卖出" << endl;} void Buy(){cout << "国债 1 买入" << endl;} }; class Realty1 { public: void Sell(){cout << "房地产 1 卖出" << endl;} void Buy(){cout << "房地产 1 买入" << endl;} }; //基金类 class Fund { public: Fund() { m_stk1 = unique_ptr<Stock1>(new Stock1); m_stk2 = unique_ptr<Stock2>(new Stock2); m_stk3 = unique_ptr<Stock3>(new Stock3); m_nd1 = unique_ptr<NationalDebt1>(new NationalDebt1); m_rel1 = unique_ptr<Realty1>(new Realty1); } void BuyFund() { m_stk1->Buy(); m_stk2->Buy(); m_stk3->Buy(); m_nd1->Buy(); m_rel1->Buy(); } void SellFund() { m_stk1->Sell(); m_stk2->Sell(); m_stk3->Sell(); m_nd1->Sell(); m_rel1->Sell(); } private: unique_ptr<Stock1> m_stk1; unique_ptr<Stock2> m_stk2; unique_ptr<Stock3> m_stk3; unique_ptr<NationalDebt1> m_nd1; unique_ptr<Realty1> m_rel1; }; //客户端 int _tmain(int argc, _TCHAR* argv[]) { Fund fd; fd.BuyFund(); fd.SellFund(); return 0; }
输出:
这里的Stock1等,代表的是子系统类,fund基金类代表的是Facade类,既是外观类,这样客户端只需关注fund类就行了,实际上这也是一个日用而不知的设计模式。那么什么场景下使用此设计模式呢?这才是关键,因为这个模式本身不难。
应用场景:
1.经典的三层架构,层与层之间就可以建立外观,这样可以屏蔽复杂的子系统,降低耦合。
2.重构过程中也经常用到,子系统不断重构越加复杂,可以增加外观,减少依赖。
3.再在一个遗留的大型系统上做开发时,可能这个系统已经难以维护和扩展了,为新系统开发一个外观,原来维护老系统的人实现外观需要调用的接口,可以更好的分工合作,因为开发新系统的人,只需关注外观接口就行了。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 深入浅出23种设计模式
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 学习JavaScript设计模式(接口)
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- JavaScript设计模式之单件模式介绍
- 学习JavaScript设计模式之观察者模式