Maison  >  Article  >  interface Web  >  Analysez en détail le modèle d'usine abstraite JS pour vous

Analysez en détail le modèle d'usine abstraite JS pour vous

亚连
亚连original
2018-05-19 09:08:401028parcourir

Cet article résume principalement l'expérience et le résumé de l'auteur lors de l'apprentissage du modèle d'usine abstraite JS. Les amis intéressés peuvent suivre et apprendre.

Voici les problèmes et exemples de code que j'ai rencontrés au cours de mon étude. Enfin, je vais vous donner un résumé de votre apprentissage sur le modèle de fabrique abstraite JS.

Le modèle Abstract Factory (Abstract Factory) utilise l'abstraction de classe pour rendre l'entreprise adaptée à la création d'un cluster de classes de produits sans être responsable des instances d'un certain type de produit.

Il n'y a pas de classe abstraite directe dans JS. Abstract est un mot réservé, mais il n'a pas encore été implémenté. Par conséquent, nous devons générer une erreur dans la méthode de classe pour simuler la classe abstraite. pas de remplacement dans la sous-classe héritée, si vous écrivez cette méthode et l'appelez, une erreur sera générée.

const Car = function() { }
Car.prototype.getPrice = function() {return new Error('抽象方法不能调用')}

Implémentation

Il existe un modèle de fabrique abstraite dans les langages orientés objet. Tout d'abord, déclarez une classe abstraite en tant que classe parent. pour résumer certaines fonctionnalités requises par un type de produit. Une sous-classe qui hérite de la classe parent doit implémenter les méthodes déclarées dans la classe parent et réaliser les fonctions déclarées dans la classe parent :

/**
* 实现subType类对工厂类中的superType类型的抽象类的继承
* @param subType 要继承的类
* @param superType 工厂类中的抽象类type
*/
const VehicleFactory = function(subType, superType) {
 if (typeof VehicleFactory[superType] === 'function') {
  function F() {
   this.type = '车辆'
  } 
  F.prototype = new VehicleFactory[superType]()
  subType.constructor = subType
  subType.prototype = new F()        // 因为子类subType不仅需要继承superType对应的类的原型方法,还要继承其对象属性
 } else throw new Error('不存在该抽象类')
}
VehicleFactory.Car = function() {
 this.type = 'car'
}
VehicleFactory.Car.prototype = {
 getPrice: function() {
  return new Error('抽象方法不可使用')
 },
 getSpeed: function() {
  return new Error('抽象方法不可使用')
 }
}
const BMW = function(price, speed) {
 this.price = price
 this.speed = speed
}
VehicleFactory(BMW, 'Car')    // 继承Car抽象类
BMW.prototype.getPrice = function() {    // 覆写getPrice方法
 console.log(`BWM price is ${this.price}`)
}
BMW.prototype.getSpeed = function() {
 console.log(`BWM speed is ${this.speed}`)
}
const baomai5 = new BMW(30, 99)
baomai5.getPrice()             // BWM price is 30
baomai5 instanceof VehicleFactory.Car    // true

Résumé

Grâce à l'usine abstraite, vous pouvez créer des produits d'un certain cluster de classes, et vous pouvez également utiliser instanceof pour vérifier la catégorie de produits, et également disposer des méthodes nécessaires pour ce cluster de classes.

Ce qui précède est ce que j'ai compilé pour vous. J'espère que cela vous sera utile à l'avenir.

Articles connexes :

Résumé de trois façons de charger dynamiquement des fichiers JS

js prend en charge le cross-post request Résumé des méthodes de domaine

Vue.jsExplication détaillée du calcul et de l'utilisation des propriétés d'écoute

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn