介绍

将 new 操作单独封装

遇到 new 时,就要考虑是否该使用工厂模式

简单工厂模式:提供一个创建一系列相关对象的入口,统一了对象创建职责,创建对象无需关心具体类。

工厂模式:提供一个创建一系列相关对象的入口,统一了对象创建职责,创建对象无需关心具体类。使用一个工厂类进行创建。

抽象工厂模式:一个工厂类可以对应多个产品类,对应产生多个实例对象。

演示

class Product {
  constructor(name) {
    this.name = name;
  }
  init() {
    console.log("init");
  }
  fn1() {
    console.log("fn1");
  }
}

class Creator {
  create(name) {
    return new Product(name);
  }
}

const creator = new Creator();
const p = creator.create("p1");
console.log(p);
p.init();
p.fn1();

class Student {
  constructor(name, courses) {
    this.name = name;
    this.courses = courses;
  }
}

function factory(name, type) {
  switch (type) {
    case "文科":
      return new Student(name, ["政治", "历史", "地理"]);
    case "理科":
      return new Student(name, ["生物", "物理", "化学"]);
    default:
      throw "没有这个专业,别瞎填";
  }
}

const xm = factory("小明", "文科");
const xh = factory("小红", "理科");

console.log(xm);
console.log(xh);
function People(name) {
  if (this instanceof People) {
    this.name = name;
  } else {
    return new People(name);
  }
}

const xh = new People("小红");
const xm = People("小明");

console.log(xh);
console.log(xm);

应用场景

jQuery - $(‘div’)

React.createElement

Vue.js 异步组件