diff --git a/src/ticket/audience.ts b/src/ticket/audience.ts index fb285f2..3d9ebfa 100644 --- a/src/ticket/audience.ts +++ b/src/ticket/audience.ts @@ -1,13 +1,10 @@ import { Bag } from './bag'; +import { Ticket } from './ticket'; export class Audience { - private readonly bag: Bag; + constructor(private bag: Bag) {} - constructor(bag: Bag) { - this.bag = bag; - } - - get getBag(): Bag { - return this.bag; + buy(ticket: Ticket): number { + return this.bag.hold(ticket); } } diff --git a/src/ticket/bag.ts b/src/ticket/bag.ts index 8942c71..04199b4 100644 --- a/src/ticket/bag.ts +++ b/src/ticket/bag.ts @@ -2,16 +2,9 @@ import { Invitation } from './invitation'; import { Ticket } from './ticket'; export class Bag { - private amount: number; - - private invitation: Invitation; - private ticket: Ticket; - constructor(invitation: Invitation, amount: number) { - this.invitation = invitation; - this.amount = amount; - } + constructor(private invitation: Invitation, private amount: number) {} public hasInvitation(): boolean { return this.ticket != null; @@ -28,4 +21,16 @@ export class Bag { public plusAmount(amount: number) { this.amount += amount; } + + public hold(ticket: Ticket) { + if (this.hasInvitation()) { + this.setTicket(ticket); + return 0; + } + + this.setTicket(ticket); + this.minusAmount(ticket.getFee); + + return ticket.getFee; + } } diff --git a/src/ticket/theater.ts b/src/ticket/theater.ts index 3a9f48c..21d6e8e 100644 --- a/src/ticket/theater.ts +++ b/src/ticket/theater.ts @@ -2,21 +2,9 @@ import { Audience } from './audience'; import { TicketSeller } from './ticketSeller'; export class Theater { - private ticketSeller: TicketSeller; - - constructor(ticketSeller: TicketSeller) { - this.ticketSeller = ticketSeller; - } + constructor(private ticketSeller: TicketSeller) {} public enter(audience: Audience): void { - if (audience.getBag.hasInvitation()) { - const ticket = this.ticketSeller.getTicketOffice.getTicket; - audience.getBag.setTicket(ticket); - } else { - const ticket = this.ticketSeller.getTicketOffice.getTicket; - audience.getBag.minusAmount(ticket.getFee); - this.ticketSeller.getTicketOffice.plusAmount(ticket.getFee); - audience.getBag.setTicket(ticket); - } + this.ticketSeller.sellTo(audience); } } diff --git a/src/ticket/ticketOffice.ts b/src/ticket/ticketOffice.ts index c39c74a..8a1aeb1 100644 --- a/src/ticket/ticketOffice.ts +++ b/src/ticket/ticketOffice.ts @@ -1,14 +1,7 @@ import { Ticket } from './ticket'; export class TicketOffice { - private amount: number; - - private tickets: Array; - - constructor(amount: number, tickets: Array) { - this.amount = amount; - this.tickets = tickets; - } + constructor(private amount: number, private tickets: Array) {} get getTicket(): Ticket { return this.tickets.pop(); diff --git a/src/ticket/ticketSeller.ts b/src/ticket/ticketSeller.ts index 2cfe2f7..fb5f240 100644 --- a/src/ticket/ticketSeller.ts +++ b/src/ticket/ticketSeller.ts @@ -1,13 +1,10 @@ import { TicketOffice } from './ticketOffice'; +import { Audience } from './audience'; export class TicketSeller { - private readonly ticketOffice: TicketOffice; + constructor(private ticketOffice: TicketOffice) {} - constructor(ticketOffice: TicketOffice) { - this.ticketOffice = ticketOffice; - } - - get getTicketOffice(): TicketOffice { - return this.ticketOffice; + sellTo(audience: Audience) { + this.ticketOffice.plusAmount(audience.buy(this.ticketOffice.getTicket)); } }