javascript设计模式之工厂方法模式入门教程

发布时间:2020-05-03编辑:脚本学堂
有关javascript设计模式中工厂方法模式的入门教程,包括简单工厂模式、多个工厂方法模式、静态工厂模式等内容,感兴趣的朋友参考下。

javascript 设计模式中,工厂模式应用最为广泛,本节为大家重点介绍工厂模式的实现原理与代码。

1. 简单工厂模式
说明:创建一个工厂类,里面实现了所对同一个接口的实现类的创建。
但是好像JavaScript 好像没有 接口 这号东西,所以去掉接口这个层;
当然,这里的 实现类 下的成员变量,方法应该都是一样的;

例如,短信发送跟邮件发送的例子;

1>. 邮件发送[实现]类
 

复制代码 代码示例:
function MailSender() {
    this.to = '';
    this.title = '';
    this.content = '';
}
MailSender.prototype.send = function() {
    //send body
}

2>. 短信发送[实现]类
 

复制代码 代码示例:
function SmsSender() {
    this.to = '';
    this.title = '';
    this.content = '';
}
SmsSender.prototype.send = function() {
    //send body
}

3>. 创建一个工厂类:
 

复制代码 代码示例:
function SendFactory() {
    this.sender = null;
}
SendFactory.prototype.produce = function(type) {
    var me = this;
    if (type == 'mail') {
        me.sender = new MailSender();
    } else if (type == 'sms') {
        me.sender = new SmsSender();
    }
   return me.sender;
}

4>. 使用这个工厂类:
 

复制代码 代码示例:
var factory = new SendFactory();
var sender = factory.produce('mail'); //sms
sender.to = 'toName#mail.com';
sender.title = '邮件测试标题!';
sender.content = '发送内容';
sender.send();

2. 多个工厂方法模式
说明:多个工厂模式方法,是对普通工厂方法的改进,因为返回实现是依据传进去的字符返回,当字符输入错误,可能就无法处理,或是处理成错误的方式; 而多个工厂模式方法,就可以避免这样的错误;

对上面的工厂类进行改进:
 

复制代码 代码示例:
function SendFactory() {
    this.sender = null;
}
SendFactory.prototype.produceMail = function() {
    var me = this;
    me.sender = new MailSender();
    return me.sender;
}
SendFactory.prototype.produceSms = function() {
    var me = this;
    me.sender = new SmsSender();
    return me.sender;
}

使用方法:
 

复制代码 代码示例:
var factory = new SendFactory();
var sender = factory.produceSms(); //produceMail
sender.to = 'toName#xxxxx';
sender.title = '短信发送方法标题';
sender.content = '发送内容';
sender.send();

3. 静态工厂方法模式
说明:将上面的 多个工厂方法模式 的方法改为静态标识即可,使之不必对 SendFactory 进行实例化;
将工厂类代码修改为:
 

复制代码 代码示例:
var SendFactory = {
    produceMail : function() {
        return new MailSender();
    },
    produceSms : function() {
        return new SmsSender();
    }
}

使用方法:
 

var sender = SendFactory.produceMail();
sender.to = 'toName#mail.com';
sender.title = '邮件发送标题';
sender.content = '发送内容';
sender.send();

工厂方法模式说明
面向对象思想编程说明,在具有很多产品(现实世界模型,名称:类名,成员属性,及操作方法等)需要初始化,即产品需要创建,并且[实现同一接口时],可以使用工厂方法模式; 第一种模式,有输入类型错误的可能,第二模式,需要用时即创建工厂实例;