Damien Flandrin

Tutoriels, astuces et conseils sur le développement web par un développeur web

Tutoriel - Qu'est-ce que le Design Pattern Factory

il y a 7 mois · 1 MIN DE LECTURE
#Tutoriel  #Javascript  #Design Pattern 

Design Pattern Factory est un autre modèle de création basé sur la classe. Dans ce cas, nous fournissons une interface générique qui délègue la responsabilité de l'instanciation des objets à ses sous-classes.

Ce modèle est fréquemment utilisé lorsqu'il s'agit de gérer ou de manipuler des collections d'objets qui sont différents mais qui présentent de nombreuses caractéristiques similaires.

Dans cet exemple, nous créons une classe Factory nommée BallFactory qui a une méthode qui prend en compte les paramètres et qui, en fonction des paramètres, délègue la responsabilité de l'instanciation de l'objet à la classe respective. Si le paramètre type est football ou "rugby", l'instanciation de l'objet est gérée par la classe Football mais si c'est basketball l'instanciation de l'objet est gérée par la classe Basketball.

class BallFactory {
  constructor() {
    this.createBall = function(type) {
      let ball;
      if (type === 'football' || type === 'rugby') ball = new Football();
      else if (type === 'basketball') ball = new Basketball();
      ball.roll = function() {
        return `Le ${this._type} roule.`;
      };

      return ball;
    };
  }
}

class Football {
  constructor() {
    this._type = 'football';
    this.kick = function() {
      return 'Tu as frappé le balon.';
    };
  }
}

class Basketball {
  constructor() {
    this._type = 'basketball';
    this.bounce = function() {
      return 'Tu as fait rebondir le balon.';
    };
  }
}

// creating objects
const factory = new BallFactory();

const myFootball = factory.createBall('football');
const myBasketball = factory.createBall('basketball');

console.log(myFootball.roll()); // Le football roule.
console.log(myBasketball.roll()); // Le basketball roule.
console.log(myFootball.kick()); // Tu as frappé le balon.
console.log(myBasketball.bounce()); // Tu as fait rebondir le balon.

···

Damien Flandrin

Je suis développeur web pour l'agence Carredas, je fais principalement du PHP avec Laravel et Prestashop.

Développeur Web - Damien Flandrin