private final DiscountPolicy discountPolicy = new FixDiscountPolicy();

FixDiscountPolicy, RateDiscountPolicy는 DiscountPolicy 인터페이스의 구현체들이다.
현재 할인 방법이 금액제할인이라고 가정하였을 때 할인방법을 할인율로 변경한다면 아래와 같이 바꿔주면 된다.
//private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
OrderServiceImpl은 인터페이스에 의존하기 때문에 DIP를 위반하지 않는 것 같지만 RateDiscountPolicy 구현체에 의존적이게 되면서 DIP를 위반했고 이 때문에 코드변경이 일어나서 OCP도 위반하게 된다.
그리고 객체의 생성, 연결, 실행등 다양한 책입을 가지면서 SRP를 위반했다.

public class AppConfig {
public OrderService orderService() {
return new OrderServiceImpl(new RateDiscountPolicy());
}
}
public static void main(String[] args) {
AppConfig appConfig = new AppConfig();
OrderService orderService = appConfig.orderService();
}
private final DiscountPolicy discountPolicy;
public OrderService orderService() {
return new OrderServiceImpl(discountPolicy());
}
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}
}
