어떤 다른 객체로 접근하는 것을 통제하기 위해서 그 객체의 대리자(surrogate)나 자리표시자(placeholder)의 역할을 하는 객체를 제공하는 패턴
중요한 것은 흐름제어만 할 뿐 결과값을 조작하거나 변경시키지 않는다
창고에서 주문처리하기 전에 재고가 있는지 확인하는 시스템 구현
IOrder.class
public interface IOrder {
void fulfillOrder(Order order);
}
Warehouse.class
public class Warehouse implements IOrder {
private Hashtable<Integer, Integer> stock;
private String address;
@Override
public void fulfillOrder(Order order) {
for (Item item: order.getItemList()) {
Integer sku = item.getSku();
this.stock.replace(sku, stock.get(sku) - 1);
/* 포장, 배송 등 기타 작업들이 추가적으로 이루어질 수 있음 */
}
}
public int currentInventory(Item item) {
return stock.getOrDefault(stock.get(item.getSku()), 0);
}
}
OrderFulfillment.class
public class OrderFulfillment implements IOrder {
private List<Warehouse> warehouses;
@Override
public void fulfillOrder(Order order) {
for (Item item: order.getItemList()) {
for (Warehouse warehouse: warehouses) {
if (warehouse.currentInventory(item) != 0) {
warehouse.fulfillOrder(order);
}
}
}
}
}
Warehouse
에게 요청한다참조: