퍼사드패턴(Facade Pattern)의 목적은 복잡한 서브시스템을 인터페이스로 감싸 간단하게 만드는 것이다.
퍼사드패턴은 다음과 같은 특징을 갖는다.
위 다이어그램에서 처럼 다양한 서브시스템이 사용되는 시스템에서 Facade Class는 서브 시스템을 추상화할 수 있다.
즉, 클라이언트는 서브시스템으로 분리되어 서브시스템에 의존하지 않아도 된다는 장점이 있다.
위 다이어그램을 토대로 코드를 구현해보자!
// SubSystem1.java
public class SubSystem1 {
public void doSomething(String name) {
System.out.println("동작 1: " + name);
}
}
// SubSystem2.java
public class SubSystem2 {
public void doSomething(String name) {
System.out.println("동작 2: " + name);
}
}
// SubSystem3.java
public class SubSystem3 {
public void doSomething(String name) {
System.out.println("동작 3: " + name);
}
}
// FacadeService.java
public class FacadeService {
private final SubSystem1 subSystem1;
private final SubSystem2 subSystem2;
private final SubSystem3 subSystem3;
public FacadeService() {
subSystem1 = new SubSystem1();
subSystem2 = new SubSystem2();
subSystem3 = new SubSystem3();
}
public void operate(String name) {
subSystem1.doSomething(name);
subSystem2.doSomething(name);
subSystem3.doSomething(name);
}
}
// Client.java
public class Client {
public static void main(String args[]){
FacadeService facadeService = new FacadeService();
facadeService.operate("Client");
}
}
FacadeService가 SubSystem1, SubSystem2, SubSystem3을 캡슐화하였고, Client클래스는 operator메소드를 통해 사용할 수 있다.(내부는 알 수 없음)