デザインモードの外観モード(Facade)C++


外観モード:クライアントに統一的なインタフェースを提供し、クライアント要求を処理し、クライアントと具体的な機能クラスを分離させ、具体的な機能クラスの修正はクライアントに影響しない.サブシステムをより容易に使用できるように、上位レベルのインタフェースを定義します.
動機:1つのシステムをいくつかのサブシステムに分割することはシステムの複雑性を低減するのに有利であり、1つの一般的な設計目標は各サブシステムの通信と相互依存関係を最小限に抑えることであり、この目標を達成する方法の1つは外観モードを導入し、外観モードを利用して各サブシステムに統一的に一致する簡単なインターフェースを提供することである.
外観モードの汎用UML
Facadeクラス:外観クラス、クライアントと直接連絡し、内部機能の統一インタフェースを提供し、内部の各サブシステムまたはクラスの相互連絡の詳細を遮断します.
Class 1~Class 5:内部の各サブシステムまたは機能完了に関するクラス,サブシステムまたはクラスが互いに連携して外層クライアントの要求を行う.
外観モードの効果:
1、顧客に対してサブシステムコンポーネントを遮断したので、クライアント処理対象の数を減らし、サブシステムの使用をより便利にする.
2、サブシステムとクライアントとの間の緩い結合関係が実現され、サブシステムの内部の各部品は通常、ごくたまにである.
3、クライアントが必要とする場合、クライアントがサブシステムクラスを使用することを制限しないため、システムの使いやすさと汎用性の間で選択することができる.
汎用外観モードのコード例を次に示します.
Façade.h
/*Facade     ,        ,              ,
                  ,               
     VC     ,  VC BUILD    ,         
     ,         .

*/


#include

class Class1
{
public:
	void MethodA(){ std::cout << "class 1 MethodA
"; }; }; class Class2 { public: void MethodB(){ std::cout << "class 2 MethodB
"; }; }; class Class3 { public: void MethodC(){ std::cout << "class 3 MethodC
"; }; }; class Class4 { public: void MethodD(){ std::cout << "class 4 MethodD
"; }; }; class Class5 { public: void MethodE(){ std::cout << "class 5 MethodE
"; }; }; class Facade { public: Facade(); ~Facade(); void FunctionA(); void FuncTionB(); private: Class1* pm_class1; Class2* pm_class2; Class3* pm_class3; Class4* pm_class4; Class5* pm_class5; };

Façade.cpp
#include"Facade.h"

Facade::Facade()
{
	pm_class1 = new Class1();
	pm_class2 = new Class2();
	pm_class3 = new Class3();
	pm_class4 = new Class4();
	pm_class5 = new Class5();
}

Facade::~Facade()
{
	delete pm_class1;
	delete pm_class2;
	delete pm_class3;
	delete pm_class4;
	delete pm_class5;
}

//  A
void Facade::FunctionA()
{
	pm_class1->MethodA();
	pm_class2->MethodB();
	pm_class3->MethodC();
}

//  B
void Facade::FuncTionB()
{
	pm_class1->MethodA();
	pm_class2->MethodB();
	pm_class4->MethodD();
	pm_class5->MethodE();
}

クライアントコード:
#include "Facade.h"

int main()
{
	/*     ,                     ,
	        ,               ,            
	*/
	Facade facade;
	facade.FunctionA();//       A
	facade.FuncTionB();//       B
	return 0;
}

ソフトウェアシステムアーキテクチャの設計時にできるだけクライアントクラスを使用し、イベントメカニズムとメッセージ配布メカニズムを十分に使用しなければならない.