Maison > interface Web > js tutoriel > À propos du modèle de fabrique abstraite JS (tutoriel détaillé)

À propos du modèle de fabrique abstraite JS (tutoriel détaillé)

亚连
Libérer: 2018-06-20 16:48:19
original
2502 Les gens l'ont consulté

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 l'auteur a rencontrés au cours de son étude. Enfin, il résume également votre apprentissage sur le modèle d'usine 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('抽象方法不能调用')}
Copier après la connexion

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 un certain Pour les caractéristiques 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
Copier après la connexion

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

Articles connexes :

Comment déterminer la taille du type de fichier en js

Comment implémenter la vérification glissante requise pour la connexion en js

Comment implémenter la fonction de requête floue de la liste déroulante dans Angular

À propos des connaissances en matière de sécurité du module crypto dans Nodejs (tutoriel détaillé)

Comment implémenter les fonctions de pagination et de recherche dans angulairejs

Comment utiliser vue pour introduire la configuration de l'arrière-plan de l'éditeur et du nœud

In Node Comment créer un service d'arrière-plan pour petit programme en .js

Problèmes liés à l'optimisation du chargement de fichiers en js

Comment utiliser nodejs +mongodb+vue Configurer l'éditeur

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!

Étiquettes associées:
js
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal