스프링/1. 스프링 핵심 원리

10강. 주문할인정책 구현

sdafdq 2023. 7. 16. 12:19
public interface DiscountPolicy {

    int discount(Member member, int price);

}
public class FixDscountPolicy implements DiscountPolicy {
    private int discountFixAmount = 1000;
    @Override
    public int discount(Member member, int price) {
        if(member.getGrade()== Grade.VIP){
            return discountFixAmount;
        }else {
            return 0;
        }
    }
}

고정, Percent 바뀔지 모르니 인터페이스.

 

public class Order {
    private Long memberId;
    private String itemName;
    private int itemPrice;
    private int discountPrice;

    public Order(Long memberId, String itemName, int itemPrice, int discountPrice) {
        this.memberId = memberId;
        this.itemName = itemName;
        this.itemPrice = itemPrice;
        this.discountPrice = discountPrice;
    }

    public int calculatePrice(){
        return itemPrice - discountPrice;
    }

    @Override
    public String toString() {
        return "Order{" +
                "memberId=" + memberId +
                ", itemName='" + itemName + '\'' +
                ", itemPrice=" + itemPrice +
                ", discountPrice=" + discountPrice +
                '}';
    }
}

주문에 대한 객체, toString 정보 원할하게 보기 위해 오버라이드, calculate는 할인 후 금액 보기 쉽게.

 

 

public interface OrderService {
    Order createOrder(Long memberId, String itemName, int itemPrice);
}

주문에 대한 객체와 클라이언트의 상호작용을 해주는 서비스

 

 

public class OrderServiceImpl implements OrderService{
    private MemberRepository memberRepository = new MemoryMemberRepository();
    private final DiscountPolicy discountPolicy = new FixDscountPolicy();
    @Override
    public Order createOrder(Long memberId, String itemName, int itemPrice) {
        Member member = memberRepository.findById(memberId);
        int discountPrice = discountPolicy.discount(member, itemPrice);

        return new Order(memberId, itemName, itemPrice, discountPrice);
    }
}

구현. 어쩌다 보니 이게 컨테이너 역할을 하게 됬네.

 

이거 설계 잘 된거라고 함.

왜냐하면 상호작용을 하는 입장에서 그저 discountPolicy에 가격, member 넘겨주면 알아서 할인된 가격까지 넘겨주기 때문.

 

즉, 네이밍된 역할에 충실했음.