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 相关文章推荐
JavaScript 事件冒泡简介及应用
Jan 11 Javascript
LazyLoad 延迟加载(按需加载)
May 31 Javascript
setTimeout和setInterval的深入理解
Nov 08 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
Feb 26 Javascript
JavaScript设置表单上传时文件个数的方法
Aug 11 Javascript
web 屏蔽BackSpace键实例代码
Dec 24 Javascript
Vue.js手风琴菜单组件开发实例
May 16 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
Sep 07 jQuery
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
Sep 19 Javascript
js中对象和面向对象与Json介绍
Jan 21 Javascript
原生js+canvas实现贪吃蛇效果
Aug 02 Javascript
Javascript之datagrid查询详解
Sep 15 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
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
PHP类的特性实例分析
2016/09/28 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
PHP生成随机字符串实例代码(字母+数字)
2019/09/11 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
js省市区级联查询(插件版&无插件版)
2017/03/21 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
2019/08/08 Javascript
原生js实现随机点名
2020/07/05 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
python发送arp欺骗攻击代码分析
2014/01/16 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
2016/06/16 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
学生会竞聘书范文
2014/03/31 职场文书
留学经费担保书
2014/05/12 职场文书
与美同行演讲稿
2014/09/13 职场文书
JS高级程序设计之class继承重点详解
2022/07/07 Javascript