栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

工厂模式

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

工厂模式

工厂模式

工厂模式是软件工程领域一种广为人知的设计模式,也叫虚拟构造函数模式,主要用于创建对象。
工厂模式可以分为简单工厂模式和工厂方法模式。

简单工厂模式

正常情况下,我们通过类的实例化来创建对象:

例子:

var Javascript = function(text) {
    this.text = text;
    Javascript.prototype.showText = function() {
 return this.text;
    }
}


var JavascriptAD = new Javascript("Javascript是前端开发语言!");

上例存在的最大问题是:如果引入新的类,那么实例化这个新类时就要调用对应类的构造函数。

例子:

var Javascript = function(text) {
    this.text = text;
    Javascript.prototype.showText = function() {
 return this.text;
    }
}


var Java = function(text) {
    this.text = text;
    Java.prototype.showText = function() {
 return this.text;
    }
}


var JavascriptAD = new Javascript("Javascript是前端开发语言!");

var JavaAD = new Java("Java是后端开发语言!");

类似情况出现时,理想的方法是使用简单工厂模式将创建对象的过程封装在一个函数里,由这个函数决定哪一个类应该去实例化(利用多态性)。

例子:

var Javascript = function(text) {
    this.text = text;
    Javascript.prototype.showText = function() {
 return this.text;
    }
}


var Java = function(text) {
    this.text = text;
    Java.prototype.showText = function() {
 return this.text;
    }
}



var factory = function(key) {
    switch (key) {
 case "Javascript":
     return new Javascript("Javascript是前端开发语言!");
     break;
 case "Java":
     return new Java("Java是后端开发语言!");
     break;
    }
}


var JavascriptAD = factory("Javascript");
var JavaAD = factory("Java");

工厂函数 factory 就相当于“构造函数”,通过这个函数就可以创建我们所需要的对象,无需找到对应的类。
上例中的两个类,包含的属性和方法基本一致,创建这种多个相似对象时,我们也可以直接使用工厂函数去创建。

例子:


var factory = function(text) {
    var obj = {};
    obj.text = text;
    obj.showText = function() {
 return this.text;
    }
    return obj;
}


var JavascriptAD = factory("Javascript是前端开发语言!");
var JavaAD = factory("Java是后端开发语言!");
工厂方法模式

简单工厂模式虽然解决了创建对象的问题,但其缺点也很明显:每次有新的类加入时,都必须在工厂函数中加入相应的逻辑。工厂方法模式就是对简单工厂的进一步抽象与优化。
工厂方法模式的核心是:工厂函数本身不再负责实例化对象,而是将实际创建的工作交给子类去完成。
Javascript 中生搬硬套工厂方法模式的定义并没有多大意义,因此我们只考虑它的核心思想即可,也就是工厂函数本身不再创建对象,仅负责提供接口,而交由谁去创建对象,则可以根据 Javascript 语言的特点而定,一般会选择原型对象。

例子:


var Factory = function(type, text) {
    if (this instanceof Factory) {
 return new this[type](text);
    }
    return new Factory(type, text);
}

//创建对象的方法写在工厂函数的原型里
Factory.prototype = {
    Javascript: function(text) {
 this.text = text;
 this.showText = function() {
     return this.text;
 }
    },
    Java: function(text) {
 this.text = text;
 this.showText = function() {
     return this.text;
 }
    }
}


var JavascriptAD = new Factory("Javascript", "Javascript是前端开发语言!");
var JavaAD = new Factory("Java", "Java是后端开发语言!");

重构后,如果我们想添加新类,写在工厂函数的原型里即可,工厂函数本身无需做任何修改。


如有错误,欢迎指正,本人不胜感激。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/243911.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号