-----------------------------------------------------------------------------
[Facade]
의도:
서브시스템을 합성하는 다수의 객체들의 인터페이스 집합에 대해 일관된 하나의 인터페이스를
제공할 수 있게 한다. Facade는 서브시스템을 사용하기 쉽게 하기 위한 포괄적 개념의 인터
페이스를 정의 한다.
-----------------------------------------------------------------------------/////////////////////////////////////////////////////////////////////////////
//
// A Structural part of GoF's Design Patterns
//
// - Facade
//
/////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <tchar.h>
#include <iostream>
#include <memory>
/////////////////////////////////////////////////////////////////////////////
//
// Subsystem
//
/////////////////////////////////////////////////////////////////////////////
class SubsystemA
{
public:
void OperationA (void)
{
std::cout << "\tSubsystemA::OperationA()" << std::endl;
}
void OperationB (void)
{
std::cout << "\tSubsystemA::OperationB()" << std::endl;
}
};
class SubsystemB
{
public:
void Operation (void)
{
std::cout << "\tSubsystemB::Operation()" << std::endl;
}
};
class SubsystemC
{
public:
void OperationA (void)
{
std::cout << "\tSubsystemC::OperationA()" << std::endl;
}
void OperationB (void)
{
std::cout << "\tSubsystemC::OperationB()" << std::endl;
}
void OperationC (void)
{
std::cout << "\tSubsystemC::OperationC()" << std::endl;
}
};
/////////////////////////////////////////////////////////////////////////////
//
// Facade
//
/////////////////////////////////////////////////////////////////////////////
class Facade
{
public:
void OperationA (void)
{
std::cout << "Facade::OperationA()" << std::endl;
A_.OperationA();
B_.Operation ();
C_.OperationA();
std::cout << std::endl;
}
void OperationB (void)
{
std::cout << "Facade::OperationB()" << std::endl;
A_.OperationB();
C_.OperationB();
C_.OperationC();
std::cout << std::endl;
}
private:
SubsystemA A_;
SubsystemB B_;
SubsystemC C_;
};
/////////////////////////////////////////////////////////////////////////////
//
// Startup
//
/////////////////////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
Facade f;
f.OperationA();
f.OperationB();
return 0;
}
-----------------------------------------------------------------------------Facade::OperationA()
SubsystemA::OperationA()
SubsystemB::Operation()
SubsystemC::OperationA()
Facade::OperationB()
SubsystemA::OperationB()
SubsystemC::OperationB()
SubsystemC::OperationC()