- [Java] OOP 회원과 주문 관리 설계 - (2) 주문 관리 기능2024년 10월 01일
- Song hyun
- 작성자
- 2024.10.01.:24
728x90반응형[Java] OOP 회원과 주문 관리 설계 - (2) 주문 관리 기능
1. Order
package member.order; 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) { super(); this.memberId = memberId; this.itemName = itemName; this.itemPrice = itemPrice; this.discountPrice = discountPrice; } // 상품 금액의 할인된 가격 금액을 출력하는 기능 public int calculateDiscount() { return itemPrice - discountPrice; } }
2. DiscountPolicy
package member.order; import member.Member; public interface DiscountPolicy { int discount(Member member, int price); }
3. FixDiscountPolicy
package member.order; import member.Grade; import member.Member; public class FixDiscountPolicy implements DiscountPolicy { private int discountFixAmount = 1500; @Override public int discount(Member member, int price) { // VIP 회원만 할인 금액 적용된다. if(member.getGrade() == Grade.VIP) { return discountFixAmount; } return 0; } }
4. PercentDiscountPolicy
package member.order; import member.Grade; import member.Member; public class PercentDiscountPolicyImpl implements DiscountPolicy{ private double discountDouble = 10.0; @Override public int discount(Member member, int price) { if(member.getGrade() == Grade.VIP) { return (int)(price * (discountDouble/100)); } return 0; } }
5. OrderService
package member.service; import member.order.Order; public interface OrderService { Order createOrder(Long memberId, String itemName, int itemPrice); }
6. OrderServiceImpl
package member.service; import member.Member; import member.order.DiscountPolicy; import member.order.Order; import member.repository.MemberRepsitory; public class OrderServiceImpl implements OrderService{ private final MemberRepsitory memberRepsitory; private final DiscountPolicy discountPolicy; public OrderServiceImpl(MemberRepsitory memberRepsitory, DiscountPolicy discountPolicy) { this.memberRepsitory = memberRepsitory; this.discountPolicy = discountPolicy; } @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepsitory.findById(memberId); int discountPrice = discountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } }
7. OrderServiceTest
package order; import member.Grade; import member.Member; import member.repository.MemberRepsitory; import member.repository.MemoryMemberRepositoryImpl; public class OrderServiceTest { public static void main(String[] args) { MemberRepsitory memberRepsitory = MemoryMemberRepositoryImpl.getInstance(); Member member = new Member(1L, "길동이", Grade.VIP); // 고정 할인 정책 테스트 DiscountPolicy fixDiscountPolicy = new FixDiscountPolicy(); DiscountPolicy percentDiscountPolicy = new PercentDiscountPolicyImpl(); OrderService orderService1 = new OrderServiceImpl(memberRepsitory,percentDiscountPolicy); Order order1 = orderService1.createOrder(1L, "맥북", 10000); System.out.println(order1); System.out.println(order1.calculateDiscount()); } }
-객체지향적인 관점을 통해 코드를 설계하면, 보다 적은 코드 수정으로 효율적인 관리가 가능하다!!
8. MainApp
package config; import member.Grade; import member.Member; import member.service.MemberService; import order.Order; import order.OrderService; public class MainApp { public static void main(String[] args) { AppConfig appConfig = new AppConfig(); // 클라이언트 입장에서 코딩 // 회원 가입 기능이 필요함 MemberService memberService = appConfig.getMemberService(); Member member = new Member (200L, "도시락", Grade.VIP); memberService.signUp(member); // 회원 가입 // 사용자 주문 요청 OrderService orderService1 = appConfig.getorderService(); Order order1 = orderService1.createOrder(member.getId(), "아이폰16", 3_000); System.out.println(order1); System.out.println(order1.calculateDiscount()); } }
*AppConfig
package config; import member.repository.MemberRepsitory; import member.repository.MemoryMemberRepositoryImpl; import member.service.MemberService; import member.service.MemberServiceImpl; import order.DiscountPolicy; import order.FixDiscountPolicy; import order.OrderService; import order.OrderServiceImpl; public class AppConfig { public MemberRepsitory getMemberRepository() { return MemoryMemberRepositoryImpl.getInstance(); } public MemberService getMemberService() { return new MemberServiceImpl(getMemberRepository()); } public DiscountPolicy getDiscountPolicy() { return new FixDiscountPolicy(); } public OrderService getorderService() { return new OrderServiceImpl(getMemberRepository(), getDiscountPolicy()); } }
728x90반응형'Java' 카테고리의 다른 글
[코딩 기초 트레이닝] 문자열 섞기 (2) 2024.12.21 [코딩 기초 트레이닝] 문자열 겹쳐쓰기 (2) 2024.12.21 [Java] OOP 회원과 주문 관리 설계 - (1) 회원 정보 관리 기능 (0) 2024.10.01 [입문 문제] 18. 옷가게 할인 받기 (0) 2024.06.28 [입문 문제] 16. 피자 나눠 먹기 (1) (0) 2024.06.27 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)