外観モデル(ファサード):インターフェースのセットを提供する一貫したインターフェースサブシステム、このモードは、使用するサブシステムが容易になり、高レベルのインタフェースを定義します。
それは完全に依存反転原理とデメテルのアイデアを具現します
基本的なコード
#include<iostream>
#include<string>
using namespace std;
class SubSystemOne
{
public:
void MethodOne()
{
cout << "子系统方法一" << endl;
}
};
class SubSystemTwo
{
public:
void MethodTwo()
{
cout << "子系统方法二" << endl;
}
};
class SubSystemThree
{
public:
void MethodThree()
{
cout << "子系统方法三" << endl;
}
};
class SubSystemFour
{
public:
void MethodFour()
{
cout << "子系统方法四" << endl;
}
};
//外观类,它需要了解所有的子系统的方法或属性,进行组合,以备外界调用
class Facade
{
private:
SubSystemOne *one;
SubSystemTwo *two;
SubSystemThree *three;
SubSystemFour *four;
public:
Facade()
{
one = new SubSystemOne();
two = new SubSystemTwo();
three = new SubSystemThree();
four = new SubSystemFour();
}
void MethodA()
{
cout << "方法组A()----- " << endl;
one->MethodOne();
two->MethodTwo();
four->MethodFour();
}
void MethodB()
{
cout << "方法组B()----- " << endl;
two->MethodTwo();
four->MethodFour();
}
};
int main()
{
Facade *facade = new Facade(); //由于Facade的作用,客户端可以根本不知道三个子系统类的存在
facade->MethodA();
facade->MethodB();
system("pause");
return 0;
}
ファサードパターンを使用するとき
- まず、設計の初期段階で、このような古典的な3層アーキテクチャとして、二つの別々の異なる層の感覚を持っている必要があり、あなたは層のビジネスロジック層、ビジネスロジックとプレゼンテーション層へのデータアクセス層と層の間に検討する必要があります複雑なサブシステムのための簡単なインターフェースを提供することができるファサード外観を確立する、そのような結合は大幅に低減されます。
- 第二に、開発段階で、しばしばより複雑になり、一定の進化と復興のサブシステムは、ファサードの外観を大きくすると、それらの間の依存性を低減するためのシンプルなインターフェイスを提供することができます。
- 第三には、このシステムを維持・拡大することが困難であったかもしれない、大規模なシステムの遺産を維持しながら、あなたはより明確でシンプルなインターフェイスのデザインラフまたは非常に複雑なレガシーコードを提供するために、新たなシステムのためのファサードクラスの外観を開発することができ、新システムは、オブジェクトがすべての複雑な作業と対話するファサード、ファサードレガシーコードと対話することができます。