Facade模式
Intention:
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
When:
将一个系统划分为若干个子系统有利于降低系统的复杂性。一个常见的设计目标是是子系统之间的通信和相互依赖关系达到最小。
达到该目标的途径之一就是引入一个外观对象,它为子系统中较一般的设备提供了一个单一而简单的界面。
C++ Code Example:
//facade.h
#ifndef FACADE_H
#define FACADE_H
class Subsystem1{
public:
Subsystem1();
~Subsystem1();
void Operation();
};
class Subsystem2{
public:
Subsystem2();
~Subsystem2();
void Operation();
};
class Facade{
public:
Facade();
~Facade();
void OperationWrapper();
private:
Subsystem1* m_subs1;
Subsystem2* m_subs2;
};
#endif // FACADE_H
//facade.cpp
#include "facade.h"
#include <iostream>
using std::cout;
using std::endl;
Subsystem1::Subsystem1(){
}
Subsystem1::~Subsystem1(){
}
void Subsystem1::Operation(){
cout << "Subsystem1 operation" << endl;
}
Subsystem2::Subsystem2(){
}
Subsystem2::~Subsystem2(){
}
void Subsystem2::Operation(){
cout << "Subsystem2 operation" << endl;
}
Facade::Facade(){
this->m_subs1 = new Subsystem1();
this->m_subs2 = new Subsystem2();
}
Facade::~Facade(){
delete m_subs1;
delete m_subs2;
}
void Facade::OperationWrapper(){
this->m_subs1->Operation();
this->m_subs2->Operation();
}
//main.cpp
#include "facade.h"
#include <iostream>
using namespace std;
int main()
{
Facade *f = new Facade();
f->OperationWrapper();
return 0;
}
Discuss:
Facade模式在高层提供了一个统一的接口,解耦了系统,另一种模式Mediator和Facade有类似的地方,但是Mediator主要
目的是对象间访问的解耦。