[Design Pattern] 구조 패턴 3. 퍼사드 (Facade)
Table of Contents
퍼사드 (Facade) #
- 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스를 제공한다.
- 서브시스템을 사용하기 쉽도록 상위 수준의 인터페이스를 정의하는 것이다.
- 특징
- 복잡한 하위 시스템에 단순화된 인터페이스를 제공한다.
- 모든 클래스에 결합된 전지전능한 객체가 될 수 있다는 위험성이 있다.
개념적인 예시 #
public class Facade
{
protected Subsystem1 _subsystem1;
protected Subsystem2 _subsystem2;
public Facade(Subsystem1 subsystem1, Subsystem2 subsystem2)
{
this._subsystem1 = subsystem1;
this._subsystem2 = subsystem2;
}
public string Operation()
{
string result = "Facade initializes subsystems:\n";
result += this._subsystem1.operation1();
result += this._subsystem2.operation1();
result += "Facade orders subsystems to perform the action:\n";
result += this._subsystem1.operationN();
result += this._subsystem2.operationZ();
return result;
}
}
// 서브 시스템들
public class Subsystem1
{
public string operation1()
{
return "Subsystem1: Ready!\n";
}
public string operationN()
{
return "Subsystem1: Go!\n";
}
}
public class Subsystem2
{
public string operation1()
{
return "Subsystem2: Get ready!\n";
}
public string operationZ()
{
return "Subsystem2: Fire!\n";
}
}
class Client
{
public static void ClientCode(Facade facade)
{
Console.Write(facade.Operation());
}
}
class Program
{
static void Main(string[] args)
{
Subsystem1 subsystem1 = new Subsystem1();
Subsystem2 subsystem2 = new Subsystem2();
Facade facade = new Facade(subsystem1, subsystem2);
// 클라이언트는 퍼사드만 알면 서브시스템을 손쉽게 사용할 수 있다.
Client.ClientCode(facade);
}
}