Skip to content

Instantly share code, notes, and snippets.

@ythalorossy
Created March 1, 2018 04:51
Show Gist options
  • Save ythalorossy/45546217efd6858e261cb1b8c4710fff to your computer and use it in GitHub Desktop.
Save ythalorossy/45546217efd6858e261cb1b8c4710fff to your computer and use it in GitHub Desktop.
Decorator Pattern in Typescript
abstract class Beverega {
abstract cost(): Number;
}
abstract class AddonDecorator extends Beverega {
public abstract cost(): Number;
}
class Expresso extends Beverega {
public cost(): Number {
return 1;
}
}
class Caramel extends AddonDecorator {
constructor(private beverage: Beverega) {
super();
}
public cost(): Number {
return +this.beverage.cost() + 2;
}
}
class Chocolate extends AddonDecorator {
constructor(private beverage: Beverega) {
super();
}
public cost(): Number {
return +this.beverage.cost() + 5;
}
}
// Annonymous Test Class
new class DecoratorPatternTests {
constructor() {
( () => console.log(new Chocolate(new Caramel(new Expresso())).cost()) )();
}
}();
// By Ythalo Rossy
// ythalorossy@gmail.com
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment