Façade模式:简单来说,就是在我们实现一个软件时,可能定义了很多类,实现了很多功能,但是对于用户来
说,很多sdk,他都不需要,它只需要一个init函数,就能使用sdk,比如,某款工业相机,提供了复杂的功能
去控制和使用相机,但是客户还是希望,你只要给我一个init函数,然后我就能读你相机传输过来的图像就可
以了,这就是Facade设计模式,也像我们数码相机的快门一样,数码相机有很多功能,但是我们只要按快门就
能拍照,这个快门就是提供的一个Facade模式。
Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多
的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。在这里我想举一个例子
:比如,现在有一辆汽车,我们(客户程序)要启动它,那我们就要发动引擎(子系统1),使四个车轮(子系
统2)转动。但是实际中我们并不需要用手推动车轮使其转动,我们踩下油门,此时汽车再根据一些其他的操作
使车轮转动。油门就好比系统给我们留下的接口,不论汽车是以何种方式转动车轮,车轮变化成什么牌子的,
我们要开走汽车所要做的还是踩下油门。
举例如下:
#pragma once
#ifndef _FACADE_H
#define _FACADE_H
class Subsystem1
{
public:
Subsystem1();
~Subsystem1();
void Operation();
protected:
private:
};
class Subsystem2
{
public:
Subsystem2();
~Subsystem2();
void Operation();
protected:
private:
};
class FacadeClass
{
public:
FacadeClass(void);
~FacadeClass(void);
void OperationWrapper();
private:
Subsystem1 *sub1;
Subsystem2 *sub2;
};
#endif
/
//
#include "StdAfx.h"
#include "FacadeClass.h"
#include <iostream>
using namespace std;
Subsystem1::Subsystem1()
{
cout<<"subsystem construct run..."<<endl;
}
Subsystem1::~Subsystem1()
{
cout<<"subsystem1 exit run"<<endl;
}
void Subsystem1::Operation()
{
cout<<"subsystem1 operation.."<<endl;
}
Subsystem2::Subsystem2()
{
cout<<"subsystem2 construct run..."<<endl;
}
Subsystem2::~Subsystem2()
{
cout<<"subsystem2 exit run"<<endl;
}
void Subsystem2::Operation()
{
cout<<"subsystem2 operation.."<<endl;
}
FacadeClass::FacadeClass(void)
{
sub1=new Subsystem1();
sub2=new Subsystem2();
}
FacadeClass::~FacadeClass(void)
{
delete sub1;
delete sub2;
}
void FacadeClass::OperationWrapper()
{
sub1->Operation();
sub2->Operation();
}
/
//
// Facade.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "FacadeClass.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
FacadeClass *f=new FacadeClass();
f->OperationWrapper();
return 0;
}
在该程序中,定义了2个类,然后根据一个FacadeClass组和使用2个类,对这两个类中的函数进行访问。