김영한 님의 강의를 보면서 배운것들을 복습하기 위해 쓴다.
//멤버 등급
public enum Grade {
VIP, BASIC
}
//멤버 객체
public class Member {
private Long id;
private String name;
private Grade grade;
public Member(Long id, String name, Grade grade) {
this.id = id;
this.name = name;
this.grade = grade;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
//오더 객체
public class Order {
Long memberId;
String name;
int price;
public Order(Long memberId, String name, int price) {
this.memberId = memberId;
this.name = name;
this.price = price;
}
public Long getMemberId() {
return memberId;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
@Override
public String toString() {
return "Order{" +
"memberId=" + memberId +
", name='" + name + '\'' +
", price=" + price +
'}';
}
}
//멤버 저장소
public interface MemberRepository {
public void save(Member member);
public Member findById(Long memberId);
}
public class MemoryMemberRepository implements MemberRepository {
private static Map<Long, Member> memberRepository = new HashMap<>();
@Override
public void save(Member member) {
this.memberRepository.put(member.getId(), member);
}
@Override
public Member findById(Long memberId) {
Member member = memberRepository.get(memberId);
return member;
}
}
//멤버 서비스
public interface MemberService {
public void join(Member member);
public Member findMember(Long memberId);
}
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberId) {
Member member = memberRepository.findById(memberId);
return member;
}
}
//주문
public interface OrderService {
public Order createOrder(Long member, String itemName, int itemPrice);
}
public class OrderServiceImpl implements OrderService {
private final MemberService memberService;
private final DiscountPolicy discountPolicy;
public OrderServiceImpl(MemberService memberService, DiscountPolicy discountPolicy) {
this.memberService = memberService;
this.discountPolicy = discountPolicy;
}
public Order createOrder(Long memberId, String itemName, int itemPrice){
Member member = memberService.findMember(memberId);
itemPrice = discountPolicy.discount(member, itemPrice);
Order order = new Order(memberId, itemName, itemPrice);
return order;
}
}
//영수증 역할
public interface Menu {
public String getItemName();
public int getCost();
}
public class ShinRamen implements Menu{
private final String itemName;
public ShinRamen() {
itemName = "신라면";
}
@Override
public String getItemName() {
return itemName;
}
@Override
public int getCost() {
return 1500;
}
}
public class RamenDecorator implements Menu{
private final Menu menu;
public RamenDecorator(Menu menu) {
this.menu = menu;
}
@Override
public String getItemName() {
return menu.getItemName();
}
@Override
public int getCost() {
return menu.getCost();
}
}
public class Egg extends RamenDecorator{
private final String itemName = ", 계란";
private final int cost = 500;
public Egg(Menu menu) {
super(menu);
}
public String getItemName() {
return super.getItemName() + this.itemName;
}
public int getCost() {
return super.getCost() + this.cost;
}
}
public class MemberApp {
public static void main(String[] args) {
MemberRepository memberRepository = new MemoryMemberRepository();
DiscountPolicy discountPolicy = new RateDiscountPolicy();
MemberService memberService = new MemberServiceImpl(memberRepository);
OrderService orderService = new OrderServiceImpl(memberService, discountPolicy);
Member vipMember = new Member(1L, "memberA", Grade.VIP);
memberService.join(vipMember);
Member findMember = memberService.findMember(1L);
System.out.println("new member = " + vipMember.getName());
System.out.println("find Member = " + findMember.getName());
Member basicMember = new Member(2L, "memberB", Grade.BASIC);
memberService.join(basicMember);
findMember = memberService.findMember(2L);
System.out.println("new member = " + basicMember.getName());
System.out.println("find Member = " + findMember.getName());
Menu ramen = new ShinRamen();
ramen = new Egg(ramen);
ramen = new Egg(ramen);
System.out.println("Items : " + ramen.getItemName());
System.out.println("Cost : " + ramen.getCost());
findMember = memberService.findMember(1L);
Order vipOrder1 = orderService.createOrder(findMember.getId(), ramen.getItemName(), ramen.getCost());
System.out.println("order = " + vipOrder1);
findMember = memberService.findMember(2L);
Order basicOrder2 = orderService.createOrder(findMember.getId(), ramen.getItemName(), ramen.getCost());
System.out.println("order = " + basicOrder2);
}
}
'Spring 공부' 카테고리의 다른 글
스프링 기본편 정리 6 (0) | 2023.11.01 |
---|---|
스프링 기본편 정리 5 (0) | 2023.11.01 |
스프링 기본편 정리 4 (0) | 2023.11.01 |
스프링 기본편 정리3 (0) | 2023.11.01 |
스프링 기본편 정리2 (0) | 2023.11.01 |