Untitled

 avatar
unknown
plain_text
5 months ago
1.5 kB
10
Indexable
import { Pizza } from './Pizza'

export interface IPricingStrategy {
  calculatePizza(pizza: Pizza): number
}


import { Pizza } from './Pizza'
import { IPricingStrategy } from './pricingStrategy'

export class StandardPricingStrategy implements IPricingStrategy {
  calculatePizza(pizza: Pizza): number {
    let finalPrice = pizza.basePrice
    finalPrice += pizza.size
    if (pizza.isGlutenFree) finalPrice += 450

    return finalPrice
  }
}


import { Pizza } from './Pizza'
import { IPricingStrategy } from './pricingStrategy'

export class PricingService {
  constructor(public pricingStrategy: IPricingStrategy) {}

  public getPrice(pizza: Pizza) {
    return this.pricingStrategy.calculatePizza(pizza)
  }
}


import { PizzaSize } from './PizzaSize'
import { PizzaType } from './PizzaType'

export class Pizza {
  constructor(
    public basePrice: number,
    public pizzaType: PizzaType,
    public isGlutenFree: boolean,
    public size: PizzaSize
  ) {}
}


import { Pizza } from './Pizza'
import { PizzaSize } from './PizzaSize'
import { PizzaType } from './PizzaType'
import { PricingService } from './PricingService'
import { StandardPricingStrategy } from './standardPricingStrategy'

const smallPineapplePizza = new Pizza(
  200,
  PizzaType.Pineapple,
  true,
  PizzaSize.Small
)

const pricingService = new PricingService(new StandardPricingStrategy())

console.log(pricingService.getPrice(smallPineapplePizza))
Editor is loading...
Leave a Comment