dev_공부일지/Spring 6

관심사 분리 4.오브젝트 팩토리

dev_0hoon 2024. 9. 19. 21:52

현재는 Client에서 paymentService를 부를 때 어떤 것을 부를 지에 대해 책임을 가진 것이 된다.

 

public class Client {
    public static void main(String[] args) throws IOException {
        //PaymentService paymentService = new PaymentService(new WebApiExRateProvider());
        ObjectFactory factory = new ObjectFactory();
        PaymentService paymentService = factory.paymentService();

        Payment payment = paymentService.prepare(100L, "USD", BigDecimal.valueOf(50.7));
        System.out.println(payment);

    }
}

public class ObjectFactory {
    public PaymentService paymentService() {
        return new PaymentService(exRateProvider());
    }

    public ExRateProvider exRateProvider() {
        return new WebApiExRateProvider();
    }
}

 

ObjectFactory를 이용해서 그 안에서 Service를 부르게끔. Controller나 Handler의 값에서 변경되는 것이 아닌, 이제는 관리의 주체가 Factory로 변경되었다.