Heim  >  Artikel  >  Web-Frontend  >  Verfügt es6 über einen Werksmodus?

Verfügt es6 über einen Werksmodus?

WBOY
WBOYOriginal
2022-05-06 16:23:381460Durchsuche

es6 verfügt über einen Factory-Modus; der Factory-Modus kapselt Logik in eine Funktion. In es6 können Sie Objekte erstellen, ohne einen Konstruktor zu verwenden, aber class mit dem static-Schlüsselwort verwenden, um eine einfache Factory in eine statische Methode der User-Klasse zu kapseln. Die Syntax lautet „class User{constructor}static static method(){}“.

Verfügt es6 über einen Werksmodus?

Die Betriebsumgebung dieses Tutorials: Windows 10-System, ECMAScript Version 6.0, Dell G3-Computer.

Verfügt es6 über ein Factory-Muster? ES6 stellt uns die neue Syntax der Klasse zur Verfügung. Obwohl die Klasse im Wesentlichen ein syntaktischer Zucker ist, ändert dies nichts daran, dass JavaScript eine Sprache ist, die prototypische Vererbung verwendet, aber es ermöglicht die Erstellung und Vererbung von Der Vorgang wird klarer und leichter lesbar. Schreiben wir das obige Beispiel mit der neuen Syntax von ES6 um.

ES6 schreibt das einfache Factory-Muster neu

Beim Umschreiben des einfachen Factory-Musters mit ES6 verwenden wir nicht mehr den Konstruktor zum Erstellen von Objekten, sondern verwenden die neue Syntax der Klasse und das Schlüsselwort static, um die einfache Factory in zu kapseln Benutzerklasse Unter den statischen Methoden:

//User类
class User {
  //构造器
  constructor(opt) {
    this.name = opt.name;
    this.viewPage = opt.viewPage;
  }
  //静态方法
  static getInstance(role) {
    switch (role) {
      case 'superAdmin':
      return new User({ name: '超级管理员', viewPage: ['首页', '通讯录', '发现页', '应用数据', '权限管理'] });
        break;
      case 'admin':
        return new User({ name: '管理员', viewPage: ['首页', '通讯录', '发现页', '应用数据'] });
        break;
      case 'user':
        return new User({ name: '普通用户', viewPage: ['首页', '通讯录', '发现页'] });
        break;
      default:
        throw new Error('参数错误, 可选参数:superAdmin、admin、user')
    }
  }
}

//调用
let superAdmin = User.getInstance('superAdmin');
let admin = User.getInstance('admin');
let normalUser = User.getInstance('user');

Der Fabrikmodus ist der gebräuchlichste Entwicklungsmodus, der den neuen Vorgang separat kapselt. Wenn Sie auf neue stoßen, sollte der Fabrikmodus berücksichtigt werden. Erstellen Sie Objekte, ohne die Codelogik offenzulegen, und schreiben Sie die Logik in Funktionen. Diese Funktion ist das Werksmuster. Vorteile: Einfachheit. Der Nachteil besteht darin, dass jedes Mal, wenn ein Konstruktor hinzugefügt wird, die Codelogik in der Funktion geändert werden muss.

Factory-Muster ist eines der am häufigsten verwendeten Designmuster zum Erstellen von Objekten. Wir legen nicht die spezifische Logik der Objekterstellung offen, sondern kapseln die Logik in eine Funktion, dann kann diese Funktion als Fabrik betrachtet werden. Fabrikmuster können je nach Abstraktionsebene in einfache Fabriken, Fabrikmethoden und abstrakte Fabriken unterteilt werden.

Wenn Sie nur mit der JavaScript-Sprache vertraut sind, sind Sie möglicherweise etwas vage über das Konzept der Zusammenfassung, da JavaScript die Zusammenfassung immer als reserviertes Wort betrachtet und es nicht implementiert hat. Wenn Sie abstrakte Konzepte nicht gut verstehen, wird es schwierig sein, die Ähnlichkeiten und Unterschiede der drei Methoden im Fabrikmuster zu verstehen. Lassen Sie uns daher zunächst kurz die Konzepte Abstraktion und Fabrik anhand eines Szenarios beschreiben.

Das einfache Fabrikmuster wird auch als statisches Fabrikmuster bezeichnet. Ein Fabrikobjekt bestimmt, eine Instanz einer bestimmten Produktobjektklasse zu erstellen. Wird hauptsächlich zum Erstellen von Objekten desselben Typs verwendet.

In tatsächlichen Projekten müssen wir häufig verschiedene Seiten basierend auf Benutzerberechtigungen rendern. Einige Seiten, die Benutzern mit hohen Berechtigungen gehören, können von Benutzern mit niedrigen Berechtigungen nicht angezeigt werden. So können wir die Seiten, die der Benutzer sehen kann, im Konstruktor von Benutzern mit unterschiedlichen Berechtigungsstufen speichern. Instanziieren Sie Benutzer basierend auf Berechtigungen.

Der Code lautet wie folgt:

class SuperAdmin{
  constructor(){
    this.name = "超级管理员";
    this.viewPage = ['首页', '通讯录', '发现页', '应用数据', '权限管理'];
  }
}
class Admin{
  constructor(){
    this.name = "管理员";
    this.viewPage = ['首页', '通讯录', '发现页', '应用数据', '权限管理'];
  }
}
class NormalUser{
  constructor(){
    this.name = "普通用户";
    this.viewPage = ['首页', '通讯录', '发现页', '应用数据', '权限管理'];
  }
}
//工厂方法类
class UserFactory {
  getFactory(role){
   switch (role) {
     case 'superAdmin':
       return new SuperAdmin();
       break;
     case 'admin':
       return new Admin();
       break;
     case 'user':
       return new NormalUser();
       break;
     default:
       throw new Error('参数错误, 可选参数:superAdmin、admin、user');
   }
  }
 }
 
//调用
let uesr =new UserFactory();
uesr.getFactory('superAdmin');
uesr.getFactory('admin');
uesr.getFactory('user');

Der Vorteil einer einfachen Fabrik besteht darin, dass Sie nur einen korrekten Parameter benötigen, um das benötigte Objekt zu erhalten, ohne die spezifischen Details seiner Erstellung zu kennen. Die Funktion enthält jedoch die Erstellungslogik (Konstruktor) und den Beurteilungslogikcode aller Objekte. Jedes Mal, wenn ein neuer Konstruktor hinzugefügt wird, muss der Beurteilungslogikcode geändert werden.

Wenn unsere Objekte nicht die oben genannten 3, sondern 30 oder mehr sind, wird diese Funktion zu einer riesigen Superfunktion und ist schwer zu warten.

Die einfache Fabrik kann also nur verwendet werden, wenn die Anzahl der erstellten Objekte gering ist und die Logik zur Objekterstellung nicht komplex ist.

【Verwandte Empfehlungen:

Javascript-Video-Tutorial

, Web-Frontend

Das obige ist der detaillierte Inhalt vonVerfügt es6 über einen Werksmodus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn