퍼사드(Facade) 패턴: 구조패턴
하위 시스템을 보다 쉽게 사용할 수 있게 해주는 고급 인터페이스, 클라스나 객체를 조합하여 더 큰 구조를 만드는 패턴
어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공한다. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할수 있다.
쉽게 생각하면 흩어져 있는 서브 시스템을 통합하여 퍼사드 패턴을 사용해 통합하여 보다 더 쉽게 사용할 수 있음을 의미한다.
간단한 패턴이라 실무에서 은연중에 사용해본 적이 있겠다는 생각이 들었다.
장점: 사용이 간편하고, 유연성이 좋다.
다음 예제는 넷플릭스를 보는 과정을 담았습니다.
TV를 전원을 키고, 넷플릭스에 들어가 더글로리 나 피지컬100을 선택하는 과정이죠. 이거 하나하나 메서드를 호출하기보다 파사드 패턴을 사용하는 것이 Client 입장에선 간편할 것입니다.
TV
package structural.facade;
public class TV {
public void on(){
System.out.println("TV 전원을 킵니다.");
}
public void off(){
System.out.println("TV 전원을 끕니다.");
}
}
Netflix
package structural.facade;
public class Netflix {
public void start(){
System.out.println("넷플릭스를 시작합니다.");
}
public void end(){
System.out.println("넷플릭스를 종료합니다.");
}
}
Video
package structural.facade;
public class Video {
public void selecttheGlory(){
System.out.println("더 글로리 선택");
}
public void selectPhysical100(){
System.out.println("피지컬 100 선택");
}
}
WatchFacade
package structural.facade;
import lombok.Builder;
@Builder
public class WatchFacade {
private TV tv;
private Video video;
private Netflix netflix;
public void watchTheGloryFromTV(){
tv.on();
netflix.start();
video.selecttheGlory();;
}
public void watchPhysical100(){
tv.on();
netflix.start();
video.selectPhysical100();
}
public void offVideo(){
netflix.end();
tv.off();
}
}
Client
public class FacadeClient {
public static void main(String[] args) {
WatchFacade facade = WatchFacade.builder()
.video(new Video())
.netflix(new Netflix())
.tv(new TV())
.build();
facade.watchPhysical100();
facade.offVideo();
facade.watchTheGloryFromTV();
facade.offVideo();
}
}
'OOP > Design Pattern' 카테고리의 다른 글
12. 프록시(Proxy) 패턴 (0) | 2023.02.20 |
---|---|
11. 플라이웨이트(Flyweight) 패턴 (0) | 2023.02.20 |
09. 데코레이터(Decorator) 패턴 (0) | 2023.02.14 |
08. 컴포지트(Composite) 패턴 (0) | 2023.02.14 |
07. 어댑터(Adapter) 패턴 (0) | 2023.02.14 |