새로운 할인 정책 개발 및 객체 지향 프로그래밍 적용

새로운 요구사항으로 1000원 할인 고정에서 퍼센트로 계산하여 할인율을 적용하는 정책을 추가해야한다.

Untitled

public class RateDisCountPolicy implements DisCountPolicy {

    private int discountPercent = 10; // 10% 할인
    @Override
    public int discount(Member member, int price) {
        if(member.getGrade()== Grade.VIP){
            return price * discountPercent / 100;
        }else {
            return price;
        }
    }
}
import static org.junit.jupiter.api.Assertions.*;

class RateDisCountPolicyTest {

    RateDisCountPolicy rateDisCountPolicy = new RateDisCountPolicy();

    @Test
    @DisplayName("VIP는 10% 할인이 적용되어야 한다.")
    void vip_o() {
        Member memberVIP = new Member(1L, "memberVIP", Grade.VIP);
        //given
        int discount = rateDisCountPolicy.discount(memberVIP, 10000);
        //when
        assertEquals(discount, 1000);
        //then
    }

    @Test
    @DisplayName("VIP가 아니면 할인을 받지 않는다.")
    void vip_x() {
        Member memberBasic = new Member(2L, "memberBasic", Grade.BASIC);
        //given
        int discount = rateDisCountPolicy.discount(memberBasic, 10000);
        //when
        assertEquals(discount, 10000);
        //then
    }
}
public class OrderServiceImpl implements OrderService {

    public final MemberRepository memberRepository = new MemoryMemberRepository();
    private final DisCountPolicy disCountPolicy = new RateDiscountPolicy();

    @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);
    }
}

Untitled