Façade Pattern
23기 노호진
의도
한 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스를 제공하는 패턴으로,
서브시스템을 사용하기 쉽도록 상위 수준의 인터페이스를 정의 하는 것.
동기
시스템을 서브시스템으로 구조화하면 복잡성을 줄이는 데에 큰 도움이 됩니다. 공통적인 설계 목표는 서브시스템들
사이의 의사소통 및 종속성을 최소화 하려는 것입니다. 이런 목표를 달성하도록 도와주는 패턴이 퍼사드 입니다.
• 장점
– 서브시스템의 구성요소를 보호함으로써 사용자가 다루어야 할 객체가 줄어든다는 점
– 다루어야할 객체가 줄어듬에 따라 서브시스템과 사용자간의 결합도가 약해진다는 점
- 퍼사드 사용하지 않을 경우
- 퍼사드를 사용할 경우
퍼사드(Facade).pptx 퍼사드예제.zip
예제
//Client.cpp
#include "Client.h"
Client::Client(void)
{
}
Client::~Client(void)
{
}
//Client.h
#pragma once
#include "Facade.h"
class Client
{
public:
Client(void);
~Client(void);
};
//Computer.cpp
#include "Computer.h"
Computer::Computer(void)
{
}
Computer::~Computer(void)
{
}
void Computer::ComputerOn()
{
cout << "컴퓨터 on" << endl;
}
void Computer::ComputerOff()
{
cout << "컴퓨터 off" << endl;
}
//Computer.h
#pragma once
#include <iostream>
using namespace std;
class Computer
{
public:
Computer(void);
~Computer(void);
void ComputerOn();
void ComputerOff();
};
//Facade.cpp
#include "Facade.h"
Facade::Facade(void)
{
}
Facade::~Facade(void)
{
}
void Facade::ComputerOn()
{
cout << "-------------------------" << endl;
cout << "무인발권 시스템 부팅" << endl;
cout << "-------------------------" << endl;
computer->ComputerOn();
screen->ScreenOn();
ticket->TicketSystemOn();
speaker->SetVolumn(100);
speaker->SpeakerOn();
cout << "-------------------------" << endl;
}
void Facade::ComputerOff()
{
cout << "-------------------------" << endl;
cout << "무인 발권 시스템 종료" << endl;
cout << "-------------------------" << endl;
speaker->SpeakerOff();
screen->ScreenOff();
ticket->TicketSystemOff();
computer->ComputerOff();
cout << "-------------------------" << endl;
}
//Facade.h
#pragma once
#pragma warning (disable:4996)
#include <iostream>
#include <conio.h>
#include "Computer.h"
#include "Screen.h"
#include "Speaker.h"
#include "TicketSystem.h"
using namespace std;
class Facade
{
private:
Computer *computer;
Screen *screen;
Speaker *speaker;
TicketSystem *ticket;
public:
Facade(void);
~Facade(void);
Facade(Computer *computer, Screen *screen, Speaker *speaker, TicketSystem *ticket)
{
this->computer = computer;
this->screen = screen;
this->speaker = speaker;
this->ticket = ticket;
}
void ComputerOn();
void ComputerOff();
};
// Program.cpp
#include "Client.h"
void main()
{
Computer computer;
Screen screen;
Speaker speaker;
TicketSystem ticket;
Facade facade(&computer, &screen, &speaker, &ticket);
facade.ComputerOn();
facade.ComputerOff();
}
//Screen.cpp
#include "Screen.h"
Screen::Screen(void)
{
}
Screen::~Screen(void)
{
}
void Screen::ScreenOn()
{
cout<<"스크린 on"<<endl;
}
void Screen::ScreenOff()
{
cout<<"스크린 off"<<endl;
}
//Screen.h
#pragma once
#include <iostream>
using namespace std;
class Screen
{
public:
Screen(void);
~Screen(void);
void ScreenOn();
void ScreenOff();
};
//Speaker.cpp
#include "Speaker.h"
Speaker::Speaker(void)
{
}
Speaker::~Speaker(void)
{
}
void Speaker::SetVolumn(int volume)
{
cout << "스피커 볼륨 : " << volume << endl;
}
void Speaker::SpeakerOn()
{
cout << "스피커 on" << endl;
}
void Speaker::SpeakerOff()
{
cout << "스피커 off" << endl;
}
// Speaker.h
#pragma once
#include <iostream>
using namespace std;
class Speaker
{
public:
Speaker(void);
~Speaker(void);
void SetVolumn(int val);
void SpeakerOn();
void SpeakerOff();
};
//TicketSystem.cpp
#include "TicketSystem.h"
#include <iostream>
using namespace std;
TicketSystem::TicketSystem(void)
{
}
TicketSystem::~TicketSystem(void)
{
}
void TicketSystem::TicketSystemOn()
{
cout<<"무인 발권기 on"<<endl;
}
void TicketSystem::TicketSystemOff()
{
cout<<"무인 발권기 off"<<endl;
}
// TicketSystem.h
#pragma once
class TicketSystem
{
public:
TicketSystem(void);
~TicketSystem(void);
void TicketSystemOn();
void TicketSystemOff();
};