外观模式(Facade)

1.目的

   一个子系统(模块)会包含各种各样,可以实现各种不同功能的对象,他们之间可能并没有什么关系。当子系统外部,需要依赖这个子系统来完成各种不同的功能的时候,就需要与这些对象分别打交道,建立依赖关系。外观模式,就是为这个子系统建立一个类,统一处理外部的所有调用,该类持有子系统类的所有的对象,由其实现对外的接口,调度各个对象完成外部的各种请求,就像一个调度层一样。

   如同下面的例子,Facade类提供两个对外的接口Method1()和Method2(),用户只看到Facade,并且调用Facade的两个接口,Facade知道这两个接口分别由O1、O3和O2、O4完成,这样就把子系统和外部系统隔离开来。

    用途:

    隔离不同的子系统,Facade相当于为每个子系统提供了一个统一的对外接口;当一个子系统经过一个阶段比较凌乱,新增功能需要依赖这个系统时,为这个系统提一个对外接口,隔离原有系统与新增功能,方便后续重构原有系统,就不会对新功能有影响。

 

 

2.代码

#ifndef FACADE_H_
#define FACADE_H_
#include <iostream>

using namespace std;

class Object1
{
public:
	void fun1()
	{
		cout<<"fun1 called!"<<endl;
	}
};

class Object2
{
public:
	void fun2()
	{
		cout<<"fun2 called!"<<endl;
	}
};

class Object3
{
public:
	void fun3()
	{
		cout<<"fun3 called!"<<endl;
	}
};

class Object4
{
public:
	void fun4()
	{
		cout<<"fun4 called!"<<endl;
	}
};

class Facade
{
public:
	Facade():o1(*(new Object1)),o2(*(new Object2)), o3(*(new Object3)), o4(*(new Object4))
	{}
	void Method1()
	{
		cout<<"Method1 called!"<<endl;
		o1.fun1();
		o3.fun3();
	}
	void Method2()
	{
		cout<<"Method2 called!"<<endl;
		o2.fun2();
		o4.fun4();
	}
private:
	Object1& o1;
	Object2& o2;
	Object3& o3;
	Object4& o4;
};



#endif /* FACADE_H_ */


facade.cpp

#include "Facade.h"

void facade()
{
	Facade f;
	f.Method1();
	f.Method2();
};


运行结果:

Method1 called!
fun1 called!
fun3 called!
Method2 called!
fun2 called!
fun4 called!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值