javascript设计模式之工厂模式

时间:2022-08-09 14:47:47

工厂模式

工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候制定自己的对象类型(抽象工厂)

工厂模式的作用

  • 对象的构建十分复杂
  • 需要依赖具体的环境创建不同的实例
  • 处理大量具有相同属性的小对象

工厂模式的注意事项

  • 不能滥用工厂,仅仅会给代码增加复杂度

工厂模式的实现

简单工厂的实现

// 工厂对象
var factory = {};
factory.createClothes = function(){
  this.workers = 30;
  console.log('clothes ok');
};
factory.createShoes = function(){
  this.workers = 100;
  console.log('shoes ok');
};
factory.transport = function () {
  this.cars = 5;
  console.log('transport ok');
}

// 工程中的厂长
factory.director = function (params) {
  // 厂长发布命令去造一条生产线或运输线
  return new factory[params]();
}

var transportStuff = factory.director('transport');
console.log(transportStuff.cars); // 5

抽象工厂的实现

// 抽象工厂的实现 打个比方:大厂
var AbstractFactory = function(){};
AbstractFactory.prototype = {
  // 在这个工厂中不干什么事,只定义接口(规范)而不实现 
  createFactory:function() {
    throw new Error('This is an abstract method');
  }
}

// 子类的小厂 
var SmallFactory = function () {
  AbstractFactory.call(this);
}
// 这里继承父类
SmallFactory.prototype = new AbstractFactory();
SmallFactory.prototype.constructor = SmallFactory; // 将constructor指向自身
// 这里实现父类(抽象工厂)的方法 (父类只定义规范而不实现,由子类实现)
SmallFactory.prototype.createFactory = function () {
  console.log('small');
}