/*
外观模式:
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这一接口使得这一子系统更加容易使用
其中外观类需要了解所有子系统的方法或属性,对它进行组合,以备外界调用。
何时使用外观模式:
首先,在设计阶段初期,应该有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层、业务逻辑层和表示层的层与层之间建立Facade,
这样可以为系统提供一个简单的接口,使得耦合度大大降低,其次,在开发阶段,子系统往往因为不断地重构烟花而变得越来越复杂,大多数的模式使用时也都会产生很多很小的类,
这是好事,但也给外部调用他们的用户程序带来了使用上的困难。增加外观Facade可以提供一个简单的接口,减少他们之间的依赖。
第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但因为它包含非常重要的功能,新的需求开发必须依赖他。此时外观模式是非常适合的。
可以为系统开发一个外观facade类,让新系统与facede对象交互,facade与遗留代码交互所有复杂的工作。
*/
#include<iostream>
#include<string>
using namespace std;
class A
{
public:
void Method1()
{
cout << "A" << endl;
}
};
class B
{
public:
void Method2()
{
cout << "B" << endl;
}
};
class C
{
public:
void Method3()
{
cout << "C" << endl;
}
};
class D
{
public:
void Method4()
{
cout << "D" << endl;
}
};
class F
{
private:
A *one;
B *two;
C *three;
D *four;
public:
F()
{
one = new A();
two = new B();
three = new C();
four = new D();
}
~F()
{
if (one != NULL)
{
delete one;
one = NULL;
}
if (two != NULL)
{
delete two;
two = NULL;
}
if (three != NULL)
{
delete three;
three = NULL;
}
if (four != NULL)
{
delete four;
four = NULL;
}
}
public:
void MethodinFA()
{
one->Method1();
two->Method2();
}
void MethodinFB()
{
three->Method3();
two->Method2();
}
void MethodinFC()
{
three->Method3();
four->Method4();
}
};
void Client()
{
cout << "根据需要调用不同的方法" << endl;
F *p = new F();
p->MethodinFA();
p->MethodinFB();
if (p != NULL)
{
delete p;
p = NULL;
}
}
int main()
{
Client();
system("pause");
return 0;
}