Skip to content

Instantly share code, notes, and snippets.

@DoRightt
Created June 6, 2020 16:57
Show Gist options
  • Save DoRightt/64060c3c4834e7bb7f4bc9c2920b3442 to your computer and use it in GitHub Desktop.
Save DoRightt/64060c3c4834e7bb7f4bc9c2920b3442 to your computer and use it in GitHub Desktop.
abstract class Beverage {
description: string = "Unknown beverage";
getDescription() {
return this.description;
}
cost(): number {
return 0;
}
}
class CondimentDecorator extends Beverage {
getDescription() {}
}
class DarkRoast extends Beverage {
description = "Dark roast coffee";
cost(): number {
return 0.99;
}
}
class Espresso extends Beverage {
description = "Espresso";
cost(): number {
return 1.99;
}
}
class HouseBlend extends Beverage {
description = "House Blend Coffee";
cost(): number {
return 0.89;
}
}
class Decaf extends Beverage {
description = "Decaffeinated coffee";
cost(): number {
return 1.05;
}
}
class Milk extends CondimentDecorator {
beverage: Beverage;
constructor(beverage: Beverage) {
super();
this.beverage = beverage;
}
getDescription() {
return this.beverage.getDescription() + ", Milk";
}
cost(): number {
return 0.1 + this.beverage.cost();
}
}
class Mocha extends CondimentDecorator {
beverage: Beverage;
constructor(beverage: Beverage) {
super();
this.beverage = beverage;
}
getDescription() {
return this.beverage.getDescription() + ", Mocha";
}
cost(): number {
return 0.2 + this.beverage.cost();
}
}
class Soy extends CondimentDecorator {
beverage: Beverage;
constructor(beverage: Beverage) {
super();
this.beverage = beverage;
}
getDescription() {
return this.beverage.getDescription() + ", Soy";
}
cost(): number {
return 0.1 + this.beverage.cost();
}
}
class Whip extends CondimentDecorator {
beverage: Beverage;
constructor(beverage: Beverage) {
super();
this.beverage = beverage;
}
getDescription() {
return this.beverage.getDescription() + ", Whip";
}
cost(): number {
return 0.1 + this.beverage.cost();
}
}
let myOrder = new DarkRoast();
myOrder = new Milk(myOrder);
myOrder = new Mocha(new Mocha(myOrder));
myOrder = new Whip(myOrder);
console.log(myOrder.getDescription());
console.log(myOrder.cost());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment