Created
April 8, 2019 18:03
-
-
Save Kamilnaja/394381aff8774409acdfced773f51a73 to your computer and use it in GitHub Desktop.
Decorator pattern implementation in ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
abstract class Beverage { | |
description: string = "unknown beverage"; | |
public getDescription(): string { | |
return this.description; | |
} | |
public abstract cost(): number; | |
} | |
abstract class CondimentDecorator extends Beverage { | |
abstract getDescription(): string; | |
} | |
class Espresso extends Beverage { | |
constructor() { | |
super(); | |
this.description = "Espresso"; | |
} | |
cost() { | |
return 1.99; | |
} | |
} | |
class HouseBlend extends Beverage { | |
constructor() { | |
super(); | |
this.description = "House Blend" | |
} | |
public cost(): number { | |
return 2.99 | |
} | |
} | |
class TitusMaximus extends Beverage { | |
constructor(){ | |
super(); | |
this.description = "Titus Black Power" | |
} | |
public cost(): number { | |
return 29.0 | |
} | |
} | |
class Mocha extends CondimentDecorator { | |
constructor(private beverage: Beverage) { | |
super(); | |
this.beverage = beverage; | |
} | |
getDescription(): string { | |
return this.beverage.getDescription() + " Mocha"; | |
} | |
public cost(): number { | |
return 4.99 + this.beverage.cost(); | |
} | |
} | |
class Whip extends CondimentDecorator { | |
constructor(private beverage: Beverage) { | |
super(); | |
this.beverage = beverage; | |
} | |
getDescription(): string { | |
return this.beverage.getDescription() + " Whip"; | |
} | |
public cost(): number { | |
return 9.99 + this.beverage.cost(); | |
} | |
} | |
class Ink extends CondimentDecorator { | |
constructor(private beverage: Beverage) { | |
super(); | |
this.beverage = beverage; | |
} | |
getDescription(): string { | |
return this.beverage.getDescription() + " Ink "; | |
} | |
public cost(): number { | |
return 8.99 + this.beverage.cost(); | |
} | |
} | |
// let beverage = new Espresso(); | |
// console.log(beverage.getDescription() + " $ " + beverage.cost()); | |
let beverage2 = new HouseBlend(); | |
beverage2 = new Mocha(beverage2); | |
beverage2 = new Mocha(beverage2); | |
console.log(beverage2.getDescription() + " $" + beverage2.cost()); | |
let beverage3 = new TitusMaximus(); | |
beverage3 = new Mocha(beverage3); | |
beverage3 = new Whip(beverage3); | |
beverage3 = new Ink(beverage3); | |
console.log(beverage3.getDescription() + beverage3.cost()); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment