JavaScript设计模式之工厂方法模式介绍


Posted in Javascript onDecember 28, 2014

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();

工厂方法模式说明

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

Javascript 相关文章推荐
document对象execCommand的command参数介绍
Aug 01 Javascript
javascript操作cookie的文章(设置,删除cookies)
Apr 01 Javascript
jQuery的写法不同导致的兼容性问题的解决方法
Jul 29 Javascript
IE中图片的onload事件无效问题和解决方法
Jun 06 Javascript
jQuery设置和移除文本框默认值的方法
Mar 09 Javascript
如何让一个json文件显示在表格里【实现代码】
May 09 Javascript
js中获取jsp表单中radio类型的值简单实例
Aug 15 Javascript
BootStrap Table 获取同行不同列元素的方法
Dec 19 Javascript
JavaScript实现公历转农历功能示例
Feb 13 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
Nov 15 Javascript
JavaScript禁用右键单击优缺点分析
Jan 20 Javascript
JavaScript的级联函数用法简单示例【链式调用】
Mar 26 Javascript
JavaScript设计模式之抽象工厂模式介绍
Dec 28 #Javascript
JavaScript设计模式之单件模式介绍
Dec 28 #Javascript
理解javascript回调函数
Dec 28 #Javascript
JavaScript设计模式之建造者模式介绍
Dec 28 #Javascript
如何编写高质量JS代码
Dec 28 #Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
Dec 28 #Javascript
javascript中定义类的方法汇总
Dec 28 #Javascript
You might like
如何删除多级目录
2006/10/09 PHP
PHP 金额数字转换成英文
2010/05/06 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
JavaScript 事件查询综合
2009/07/13 Javascript
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
监控 url fragment变化的js代码
2010/04/19 Javascript
JQuery中的ready函数冲突的解决方法
2010/05/17 Javascript
JS高级笔记
2011/07/13 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
socket.io实现在线群聊功能
2017/04/07 Javascript
强大的JavaScript响应式图表Chartist.js的使用
2017/09/13 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
Python笔记(叁)继续学习
2012/10/24 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
纽约海:Sea New York
2018/11/04 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
水电站项目建议书
2014/05/12 职场文书
大跃进口号
2014/06/16 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
2015年公司新年寄语
2014/12/08 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
学生退学证明
2015/06/23 职场文书
给校长的建议书范文
2015/09/14 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python