灏天阁

工厂方法模式

· Yin灏
/**
 * 安全模式类
 * 保证不使用 new 关键字也可以正常运行类
 */
var Demo = function () {};
Demo.prototype = {
  show: function () {
    console.log("成功获取");
  },
};
var d = new Demo();
d.show(); // 成功获取

var d = Demo();
d.show(); // TypeError

/**
 * 解决上面的问题
 */
var Demo = function () {
  if (!(this instanceof Demo)) {
    return new Demo();
  }
};
var d = Demo();
d.show(); // 成功获取

/**
 * 安全的工厂方法
 */
// 安全模式创建的工厂类
var Factory = function (type, content) {
  if (this instanceof Factory) {
    var s = new this[type](content);
    return s;
  } else {
    return new Factory(type, content);
  }
};
// 工厂原型中设置创建所有类型数据对象的基类
Factory.prototype = {
  Java: function (content) {
    //...
  },
  JavaScript: function (content) {
    //...
  },
  UI: function (content) {
    //...
  },
  pgp: function (content) {
    //...
  },
};

var data = [
  {
    type: "JavaScript",
    content: "JavaScript 哪家强",
  },
  {
    type: "Java",
    content: "Java 哪家强",
  },
  {
    type: "php",
    content: "php 哪家强",
  },
  {
    type: "UI",
    content: "UI 哪家强",
  },
  {
    type: "UI",
    content: "UI 哪家强",
  },
  {
    type: "JavaScript",
    content: "JavaScript 哪家强",
  },
  {
    type: "JavaScript",
    content: "JavaScript 哪家强",
  },
];

for (var i = 6; i >= 0; i--) {
  Factory(s[i].type, s[i].content);
}

- Book Lists -