Skip to content

Commit

Permalink
Merge branch 'feature/#1' into develop
Browse files Browse the repository at this point in the history
[update feature] chapter 01 sample code
  • Loading branch information
creaton60 committed Jan 11, 2020
2 parents a4f2bb4 + d6f9f9b commit c8dc572
Show file tree
Hide file tree
Showing 8 changed files with 163 additions and 1 deletion.
5 changes: 4 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@ plugins {
group 'study'
version '1.0.0'

sourceCompatibility = 1.8
sourceCompatibility = 11

repositories {
mavenCentral()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'

compileOnly 'org.projectlombok:lombok:1.18.10'
annotationProcessor 'org.projectlombok:lombok:1.18.10'
}
18 changes: 18 additions & 0 deletions src/main/java/study/book/object/ticket/model/Audience.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package study.book.object.ticket.model;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
* 관람객 Model
*/
@Getter @Setter
@ToString
public class Audience {
private Bag bag;

public Audience(Bag bag) {
this.bag = bag;
}
}
50 changes: 50 additions & 0 deletions src/main/java/study/book/object/ticket/model/Bag.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package study.book.object.ticket.model;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter @Setter
@ToString
public class Bag {
private Long amount;
private Invitation invitation;
private Ticket ticket;

/**
* Bag Instance 의 상태는
* 현금과 초대장을 함께 보관하거나, 초대장 없이 보관하는 두가지
* 이 두가지를 인스턴스 생성 시점에 강제한다.
* @param amount 현금 보유량
*/
public Bag(long amount) {
this(null, amount);
}

/**
* Bag 생성시 초대장과 현금보유량으로 생성규정
*
* @param invitation 초대장
* @param amount 현금 보유량
*/
public Bag(Invitation invitation, long amount) {
this.invitation = invitation;
this.amount = amount;
}

public boolean hasInvitation() {
return invitation != null;
}

public boolean hasTicket() {
return ticket !=null;
}

public void minusAmount(Long amount) {
this.amount -= amount;
}

public void plusAmount(Long amount) {
this.amount += amount;
}
}
9 changes: 9 additions & 0 deletions src/main/java/study/book/object/ticket/model/Invitation.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
package study.book.object.ticket.model;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.time.LocalDateTime;

@Getter @Setter
@ToString
public class Invitation {
private LocalDateTime when;
}
7 changes: 7 additions & 0 deletions src/main/java/study/book/object/ticket/model/Ticket.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
package study.book.object.ticket.model;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter @Setter
@ToString
public class Ticket {
private Long fee;
}
35 changes: 35 additions & 0 deletions src/main/java/study/book/object/ticket/model/TicketOffice.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package study.book.object.ticket.model;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
* 매표소 Model
*/
@ToString
public class TicketOffice {
private Long amount;
private List<Ticket> tickets = new ArrayList<>();

public TicketOffice(Long amount, Ticket... tickets) {
this.amount = amount;
this.tickets.addAll(Arrays.asList(tickets));
}

public Ticket getTicket() {
return tickets.remove(0);
}

public void minusAmount(Long amount) {
this.amount -= amount;
}

public void plusAmount(Long amount) {
this.amount += amount;
}
}
15 changes: 15 additions & 0 deletions src/main/java/study/book/object/ticket/model/TicketSeller.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package study.book.object.ticket.model;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter @Setter
@ToString
public class TicketSeller {
private TicketOffice ticketOffice;

public TicketSeller(TicketOffice ticketOffice) {
this.ticketOffice = ticketOffice;
}
}
25 changes: 25 additions & 0 deletions src/main/java/study/book/object/ticket/service/Theater.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package study.book.object.ticket.service;

import study.book.object.ticket.model.Audience;
import study.book.object.ticket.model.Ticket;
import study.book.object.ticket.model.TicketSeller;

public class Theater {
private TicketSeller ticketSeller;

public Theater(TicketSeller ticketSeller) {
this.ticketSeller = ticketSeller;
}

public void enter(Audience audience) {
if(audience.getBag().hasInvitation()) {
Ticket ticket = ticketSeller.getTicketOffice().getTicket();
audience.getBag().setTicket(ticket);
} else {
Ticket ticket = ticketSeller.getTicketOffice().getTicket();
audience.getBag().minusAmount(ticket.getFee());
ticketSeller.getTicketOffice().plusAmount(ticket.getFee());
audience.getBag().setTicket(ticket);
}
}
}

0 comments on commit c8dc572

Please sign in to comment.