本文不讨论外观模式的具体定义
外观模式就是将接口暴露出来提供给用户使用。而且暴露出来的接口通常是封装了其他多个类的方法得到的接口,因此也算是将一些方法进行整合,放到Facade类的接口行为当中。
代码:
#include<iostream>
using namespace std;
class SubSystem1
{
public:
string operation1()const
{
return "SubSystem1,ready!\n";
}
string operation2()const
{
return "SubSystem1,go!\n";
}
};
class SubSystem2
{
public:
string operation1()const
{
return "SubSystem2,ready!\n";
}
string operation2()const
{
return "SubSystem2,go!\n";
}
};
class Facade
{
protected:
SubSystem1* sub1;
SubSystem2* sub2;
public:
Facade(SubSystem1* s1=nullptr,SubSystem2* s2=nullptr)
{
this->sub1=s1?:new SubSystem1;
this->sub2=s2?:new SubSystem2;
}
string operation()
{
string result="First,init system:\n";
result+=this->sub1->operation1();
result+=this->sub2->operation1();
result+="Second,run system:\n";
result+=this->sub1->operation2();
result+=this->sub2->operation2();
return result;
}
~Facade()
{
delete sub1;
delete sub2;
}
};
/*
First,init system:
SubSystem1,ready!
SubSystem2,ready!
Second,run system:
SubSystem1,go!
SubSystem2,go!
*/
int main()
{
SubSystem1*s1=new SubSystem1;
SubSystem2*s2=new SubSystem2;
Facade* f1=new Facade(s1,s2);
cout<<f1->operation();
delete f1;
return 0;
}