Search
 
SCRIPT & CODE EXAMPLE
 

TYPESCRIPT

ts Decorator pattern

/*Decorator
The Decorator pattern is a design pattern lets you dynamically change 
the behavior of an object at run time
and it's communly used in frameworks like Angular.

And you can implement the Decorator pattern in Typescript is very 
easy and you can use the decorator module.

Again imagine you want to make a pizza and you want to make it 
with tomato sauce, cheese and ham but you don't want to repeat the 
same steps for every pizza you make

First you need to make a pizza class:
*/
class Pizza {
  public makePizza() {
    console.log('Making a pizza...');
  }
}

// Then you make a decorator class that will decorate the pizza class:
class PizzaDecorator extends Pizza {
  constructor(public pizza: Pizza) {
    super();
  }

  public makePizza() {
    this.pizza.makePizza();
  }
}

// Then you make a concrete decorator class that extends the decorator class to add the cheese:
class CheeseDecorator extends PizzaDecorator {
  constructor(pizza: Pizza) {
    super(pizza);
  }

  public makePizza() {
    super.makePizza();
    console.log('Adding cheese...');
  }
}

// Then you make a concrete decorator class that extends the decorator 
// class to add the ham:
class HamDecorator extends PizzaDecorator {
  constructor(pizza: Pizza) {
    super(pizza);
  }

  public makePizza() {
    super.makePizza();
    console.log('Adding ham...');
  }
}

// Then you make a concrete decorator class that extends the decorator 
// class to add the mushrooms:
class MushroomDecorator extends PizzaDecorator {
  constructor(pizza: Pizza) {
    super(pizza);
  }

  public makePizza() {
    super.makePizza();
    console.log('Adding mushrooms...');
  }
}

// Then you make your pizza:
const pizza = new CheeseDecorator(new HamDecorator(new MushroomDecorator(new Pizza())));
pizza.makePizza();
// as you can see the decorator pattern uses nested classes and 
// inheritance to add new functionality to an object.
Comment

PREVIOUS NEXT
Code Example
Typescript :: typescript final example 
Typescript :: draw image html canvas 
Typescript :: nestjs mongoose schema 
Typescript :: define typescript types 
Typescript :: wherein typeorm 
Typescript :: tar contents of current folder 
Typescript :: get type of element of array typescript 
Typescript :: typescript err type 
Typescript :: listobjects vba 
Typescript :: file upload in angular 10 post 
Typescript :: typescript convert string to character array 
Typescript :: available ports for localhost 
Typescript :: wc term_exists category 
Typescript :: salesforce lwc data binding for multiple inputs values 
Typescript :: angular animation done event type typescript 
Typescript :: get and set in typescript 
Typescript :: typescrpt add onject to window namespace 
Typescript :: where to create assets folder in flutter 
Typescript :: list of objects where linq 
Typescript :: ts date get minutes 
Typescript :: conventional commits cheat sheet 
Typescript :: Why do we use fragments in react? 
Typescript :: indexof typescript 
Typescript :: react functional components setstate callback 
Typescript :: nuxtServerInit nuxt 3 
Typescript :: window object 
Typescript :: nest js joi usage 
Typescript :: addObjects giving a fatal error when pushing data to algolia 
Typescript :: run a python module with imports from parent 
Typescript :: No Apache installation can be found. Set the MOD_WSGI_APACHE_ROOTDIR environment to its location. 
ADD CONTENT
Topic
Content
Source link
Name
9+4 =