js设计模式(工厂,原型,单例)

我们知道,在设计模式中,创建型模式有五种,今天我们继续讨论剩下的模式。

 

工厂模式

工厂的作用是生产具有相同特性的相似物体。这有助于轻松管理、维护和操作对象。例如,在我们的玩具工厂,每个玩具都会有一定的信息。它将包含购买日期、原产地和类别。这里我首先定义了一个玩具叫做StarWars,然后定义了一个玩具工厂,然后根据工厂函数创建一个具体的玩具。

 

var StarWars = function(){
};
var ToyFactory = function(){
  this.createToy = function(type) 
  {
    var toy;
    if(type == "starwars") {
        toy = new StarWars();
    }
    
    toy.origin = "Origin";
    toy.dop = "2/22/2022";
    toy.category="fantasy";
    return toy;
  }
};
const toyFactory = new ToyFactory();
const starwarsToy = toyFactory.createToy('starwars');
console.log('starwarsToy:',starwarsToy.origin);

原型模式

很多时候,我们需要创建一个新对象,它具有来自另一个父对象的默认值。这可以防止创建具有未初始化值的对象。原型模式可用于创建此类对象。

原型模式也称为属性模式。

  1. 在我们的玩具厂里,我们有星球大战部门,生产许多角色。
  2. 每个角色都有一个流派、到期日期和状态字段。来自《星球大战》部门的所有玩具的这些字段将保持不变。
function Star_Wars_Prototype(parent){
   this.parent = parent;
   this.duplicate = function () 
   {
      let starWars = new StarWarsToy();
      starWars.genre = parent.genre;
      starWars.expiry = parent.expiry;
      starWars.status = parent.status;
      return starWars;
   };
}

function StarWarsToy(genre, expiry, status){
   this.genre = genre;
   this.expiry = expiry;
   this.status = status;
}

function build () {
   var star_wars_toy = new StarWarsToy('fantasy', 'NA', 'Jan');
   var new_star_wars_toy = new Star_Wars_Prototype(star_wars_toy);
   
   //When you are ready to create
   var darth = new_star_wars_toy.duplicate();
}

单例模式

单例模式对应一个“单例”。一个给定的对象只能有一个实例。当系统有数据需要从一个点进行协调时,您可以使用此模式。

var Singleton = (function () {
   var instance;

   function createInstance() {
       var object = new Object("I am the instance");
       return object;
   }

   return {
       getInstance: function () {
           if (!instance) {
               instance = createInstance();
           }
           return instance;
       }
   };
})();

function run() {

   var instance1 = Singleton.getInstance();
   var instance2 = Singleton.getInstance();

   console.log("Same instance? " + (instance1 === instance2));
}

 

版权声明:著作权归作者所有。

thumb_up 2 | star_outline 1 | textsms 0