Maison >interface Web >js tutoriel >Une brève analyse du modèle d'usine abstraite JS_Connaissances de base

Une brève analyse du modèle d'usine abstraite JS_Connaissances de base

韦小宝
韦小宝original
2017-12-15 13:48:291765parcourir

Cet article résume principalement l'expérience et le résumé de l'auteur lors de l'apprentissage de JSAbstract Factory Pattern Il existe JS analyse du code source, oui JS<.>Si vous êtes intéressé, suivez-nous et apprenez.

Voici les problèmes et exemples de code rencontrés par l'auteur 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é, nous devons donc générer une erreur dans la méthode de classe pour simuler l'abstrait. classe.Si nous héritons Si la méthode est appelée sans la remplacer dans la sous-classe, une erreur sera générée.


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


met en œuvre

pour Il existe un modèle de fabrique abstraite dans le langage objet . Premièrement, une classe abstraite est déclarée comme classe parent pour résumer les caractéristiques requises par un certain type de produit. La sous-classe qui hérite de la classe parent doit implémenter les méthodes. déclaré dans la classe parent pour implémenter la classe parent. Fonctions déclarées dans la classe :


/**
* 实现subType类对工厂类中的superType类型的抽象类的继承
* @param subType 要继承的类
* @param superType 工厂类中的抽象类type
*/
const VehicleFactory = function(subType, superType) {
 if (typeof VehicleFactory[superType] === &#39;function&#39;) {
  function F() {
   this.type = &#39;车辆&#39;
  } 
  F.prototype = new VehicleFactory[superType]()
  subType.constructor = subType
  subType.prototype = new F()        // 因为子类subType不仅需要继承superType对应的类的原型方法,还要继承其对象属性
 } else throw new Error(&#39;不存在该抽象类&#39;)
}
VehicleFactory.Car = function() {
 this.type = &#39;car&#39;
}
VehicleFactory.Car.prototype = {
 getPrice: function() {
  return new Error(&#39;抽象方法不可使用&#39;)
 },
 getSpeed: function() {
  return new Error(&#39;抽象方法不可使用&#39;)
 }
}
const BMW = function(price, speed) {
 this.price = price
 this.speed = speed
}
VehicleFactory(BMW, &#39;Car&#39;)    // 继承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 .

Recommandations associées :

modèle d'usine abstrait javascript description détaillée_compétences javascript

Introduction au modèle d'usine abstrait des modèles de conception JavaScript_compétences javascript

Comment tester JS la vitesse de réponse d'ouverture du site Web cible

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