您的位置:首页 > 其它

(八)外观模式

2016-02-16 15:49 162 查看
权威定义:外观模式(facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[DP]

定义不是很容易理解,下面结合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.再在一个遗留的大型系统上做开发时,可能这个系统已经难以维护和扩展了,为新系统开发一个外观,原来维护老系统的人实现外观需要调用的接口,可以更好的分工合作,因为开发新系统的人,只需关注外观接口就行了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式