一、UML图
二、包含的角色
Facade类 外观类,提供了一种访问子系统的便捷方式
AdditionalFacade类,其他与facade功能相对相关性的拓展功能集合,避免主facade被污染
SubSystem类,若干子系统,不会意识到外观的存在,他们在系统内运作互相之间可以直接进行交互
三、特点
外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。
四、代码实现
Facade类
#pragma once
#include "SubSystem1.h"
#include "SubSystem2.h"
#include "AdditionalFacade.h"
#include <iostream>
class Facade
{
private:
AdditionalFacade _AdditionalFacade;
SubSystem1 _one;
SubSystem2 _two;
public:
~Facade()
{
std::cout << "~Facade()"<<endl;
}
Facade():_one("sub1"),_two("sub2")
{
std::cout << "Facade()"<<endl;
}
void Operation()
{
std::cout << ">";
std::cout<<"operation facade start"<<endl;
std::cout << ">";
_one.Operation();
std::cout << ">";
_two.Operation();
std::cout << ">";
_AdditionalFacade.Operation();
std::cout << ">";
std::cout<<"operation facade end"<<endl;
}
};
AdditionalFacade类
#pragma once
#include "SubSystem3.h"
#include <iostream>
using namespace std;
class AdditionalFacade
{
private:
SubSystem3 _three;
public:
~AdditionalFacade()
{
std::cout << "~AdditionalFacade()"<<endl;
}
AdditionalFacade ():_three("sub3")
{
std::cout << "AdditionalFacade()"<<endl;
}
void Operation()
{
std::cout << ">";
std::cout << "operation AdditionalFacade start"<<endl;
std::cout << ">";
_three.Operation();
std::cout << ">";
std::cout << "operation AdditionalFacade end"<<endl;
}
};
SubSystem 类 这里只写一个吧。其他雷同
#pragma once
#include <iostream>
#include <string>
using namespace std;
class SubSystem1
{
public:
SubSystem1(string key):_key(key)
{
std::cout <<"SubSystem1()" << _key<< endl;
}
~SubSystem1()
{
std::cout <<"~SubSystem1()" << _key<< endl;
}
private:
std::string _key;
public:
void Operation()
{
std::cout << ">";
std::cout << "operation" << _key <<std::endl;
}
};
main
#include "Facade.h"
int main(int argc, char **argv)
{
AdditionalFacade *additionalFacade = new AdditionalFacade();
additionalFacade->Operation();
delete(additionalFacade);
std::cout << "---------------------------------"<<endl;
Facade *facade = new Facade();
facade->Operation();
delete(facade);
return 0;
}