퍼사드 패턴, 소개
퍼사드 패턴은 어떤 시스템이나 라이브러리의 복잡한 기능을 클라이언트에게 더 쉽게 제공하기 위한 패턴이다. 클라이언트가 복잡한 서브시스템과 직접적으로 상호작용하는 대신, 간단한 퍼사드 인터페이스와 상호작용하게끔 한다. 이를 통해 클라이언트는 서브시스템의 내부 구조를 알 필요 없이 퍼사드 인터페이스를 통해 간단하게 사용할 수 있다. 여담으로 비침투적인 스프링 프레임워크도 이러한 퍼사드 정신을 가지고 있다고 본다.
퍼사드 패턴, 코드
before
OrderProcessor.java, PaymentProcessor.java, InventoryManager.java
주문, 결제, 재고 관리로 이어지는 세 개의 서브시스템
// 서브시스템 1: 주문 처리
class OrderProcessor {
public void processOrder() {
System.out.println("Order processed");
}
}
// 서브시스템 2: 결제 처리
class PaymentProcessor {
public void processPayment() {
System.out.println("Payment processed");
}
}
// 서브시스템 3: 재고 관리
class InventoryManager {
public void updateInventory() {
System.out.println("Inventory updated");
}
}
Client.java
각각의 서브시스템과 직접적으로 상호작용하는 클라이언트 코드
public class Client {
public static void main(String[] args) {
// 각 서브시스템을 사용
OrderProcessor orderProcessor = new OrderProcessor();
PaymentProcessor paymentProcessor = new PaymentProcessor();
InventoryManager inventoryManager = new InventoryManager();
orderProcessor.processOrder();
paymentProcessor.processPayment();
inventoryManager.updateInventory();
System.out.println("Order completed");
}
}
after
OrderServiceFacade.java
각각의 서브시스템을 하나의 퍼사드로 결합
class OrderServiceFacade {
private OrderProcessor orderProcessor;
private PaymentProcessor paymentProcessor;
private InventoryManager inventoryManager;
public OrderServiceFacade() {
this.orderProcessor = new OrderProcessor();
this.paymentProcessor = new PaymentProcessor();
this.inventoryManager = new InventoryManager();
}
public void completeOrder() {
orderProcessor.processOrder();
paymentProcessor.processPayment();
inventoryManager.updateInventory();
System.out.println("Order completed");
}
}
Client.java
서브시스템과 직접적으로 상호작용할 필요 없이 퍼사드가 제공하는 메서드만 호출한다.
public class Client {
public static void main(String[] args) {
// 퍼사드를 통해 주문 서비스 사용
OrderServiceFacade orderServiceFacade = new OrderServiceFacade();
orderServiceFacade.completeOrder();
}
}
'Java > Design Pattern with Java' 카테고리의 다른 글
[구조 패턴] Chapter 9. Decorator Pattern (0) | 2023.12.11 |
---|---|
[구조 패턴] Chapter 8. Composite Pattern (0) | 2023.12.10 |
[구조 패턴] Chapter 7. Bridge Pattern (0) | 2023.11.12 |
[구조 패턴] Chapter 6-2. Adapter Pattern : 패턴 적용하기 (0) | 2022.06.13 |
[구조 패턴] Chapter 6-1. Adapter Pattern : 패턴 소개 (0) | 2022.06.04 |