简介
外观模式(Facade Pattern)属于结构型模式,它隐藏了系统的复杂性,并向客户提供一个可以访问系统的接口。为子系统中的一组接口提供了一个统一的访问接口,这样使得子系统更加容易的被使用或者访问。
使用场景:
- 为了一个复杂的模块或子系统提供统一的外界访问接口;
- 子系统相对独立,外界对子系统的访问属于黑盒操作;
UML图:
代码
#include <iostream>
#include <memory>
class SubSystem_A {
public:
void do_someting(){
std::cout << "This is sub system A" << std::endl;
}
}; //SubSystem_A
class SubSystem_B {
public:
void do_someting(){
std::cout << "This is sub system B" << std::endl;
}
}; //SubSystem_B
class SubSystem_C {
public:
void do_someting(){
std::cout << "This is sub system C" << std::endl;
}
}; //SubSystem_C
class SubSystem_D {
public:
void do_someting(){
std::cout << "This is sub system D" << std::endl;
}
}; //SubSystem_D
class Facade{
public:
Facade(){
subsystem_a.reset();
subsystem_b.reset();
subsystem_c.reset();
subsystem_d.reset();
}
void method_a(){
subsystem_a->do_someting();
subsystem_b->do_someting();
}
void method_b(){
subsystem_c->do_someting();
subsystem_d->do_someting();
}
private:
std::shared_ptr<SubSystem_A> subsystem_a;
std::shared_ptr<SubSystem_B> subsystem_b;
std::shared_ptr<SubSystem_C> subsystem_c;
std::shared_ptr<SubSystem_D> subsystem_d;
}; //Facade
int main(){
void facade_pattern_test(){
std::shared_ptr<Facade> facade = std::make_shared<Facade>();
facade->method_a();
facade->method_b();
}