Skip to content

Instantly share code, notes, and snippets.

@Kamilnaja
Created April 8, 2019 18:03
Show Gist options
  • Save Kamilnaja/394381aff8774409acdfced773f51a73 to your computer and use it in GitHub Desktop.
Save Kamilnaja/394381aff8774409acdfced773f51a73 to your computer and use it in GitHub Desktop.
Decorator pattern implementation in ts
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