728x90
Facade Pattern은 복잡한 서브시스템을 인터페이스로 감싸 간단하게 만드는 것이다. 또한 Facade Pattern은 외부 라이브러리를 추상화 하는데도 사용된다.
Client는 Facade 클래스만 접근할 할 수 있으며 이를 통해 서브 시스템에 접근할 수 있다. 이를 통해 Client는 서브시스템과 분리되어 의존도를 낮출 수 있다.
구조

▷Facade : 서브 시스템에 대한 기능을 총괄 하는 클래스이다. 클라이언트는 서브시스템을 직접 다루지 않고 Facade class를 통해서 서브 시스템의 기능으 실행한다.
구현
수학, 과학, 영어 개인 과외를 중개하는 사이트가 있다. 사용자는 각각의 과외 쌤에게 직접 컨텍 하지 않아도
수업 정보나 과외 수강 신청을 할 수 있다.
class Math
{
public void ClassInfo()
{
Console.WriteLine("수학 과외 월 8회 50만원");
}
public void ApplyClass()
{
Console.WriteLine("수학 과외 수강 접수");
}
}
class Science
{
public void ClassInfo()
{
Console.WriteLine("과학 과외 월 8회 40만원");
}
public void ApplyClass()
{
Console.WriteLine("과학 과외 수강 접수");
}
}
class English
{
public void ClassInfo()
{
Console.WriteLine("영어 과외 월 8회 30만원");
}
public void ApplyClass()
{
Console.WriteLine("영어 과외 수강 접수");
}
}
class Facade
{
Math math;
Science science;
English english;
public Facade()
{
math = new Math();
science = new Science();
english = new English();
}
public void requestClassInfo()
{
math.ClassInfo();
science.ClassInfo();
english.ClassInfo();
}
public void applyClass(string class_nm)
{
switch (class_nm)
{
case "MATH":
math.ApplyClass();
break;
case "SCIENCE":
science.ApplyClass();
break;
case "ENGLISH":
english.ApplyClass();
break;
default:
math.ApplyClass();
science.ApplyClass();
english.ApplyClass();
break;
}
}
}
static void Main(string[] args)
{
//수강신청 사이트
Facade facade = new Facade();
//수강 정보
facade.requestClassInfo();
//수강하기
facade.applyClass("MATH");
facade.applyClass("SCIENCE");
Console.ReadLine();
}
퍼사드 패턴은 서브시스템에 대한 간단한 인터페이스를 제공하는 용도 쓰기에 적합하다.
그 이상의 기능이 필요할 경우 Adapter 패턴을 사용하는게 낫다.
팩토리 메소드 -> 생성 패턴
퍼사드 -> 구조 패턴
728x90
'STUDY > Design Pattern' 카테고리의 다른 글
경량 패턴(Flyweight Pattern) (0) | 2022.12.19 |
---|---|
옵저버 패턴(Observer Pattern) (0) | 2022.12.19 |
장식자 패턴(Decorator Pattern) (0) | 2022.12.15 |
복합체 패턴(Composite Pattern) (0) | 2022.11.27 |
브릿지 패턴(Bridge Pattern) (0) | 2022.11.27 |