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 相关文章推荐
js中for in的用法示例解析
Dec 25 Javascript
通过正则表达式实现表单验证是否为中文
Feb 18 Javascript
js闭包实例汇总
Nov 09 Javascript
JavaScript设置body高度为浏览器高度的方法
Feb 09 Javascript
IE浏览器下PNG相关功能
Jul 05 Javascript
AngularJS 依赖注入详解和简单实例
Jul 28 Javascript
AngularJS入门教程之路由与多视图详解
Aug 19 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
Jan 11 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
Jan 19 Javascript
JavaScript中arguments和this对象用法分析
Aug 08 Javascript
vue实现图片预览组件封装与使用
Jul 13 Javascript
vue同个按钮控制展开和折叠同个事件操作
Jul 29 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常用正则表达式集锦
2014/08/17 PHP
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
小程序实现列表倒计时功能
2021/01/29 Javascript
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中列表、字典、元组、集合数据结构整理
2014/11/20 Python
Python操作Excel之xlsx文件
2017/03/24 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
Python格式化日期时间操作示例
2018/06/28 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
Python处理session的方法整理
2019/08/29 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
Python requests获取网页常用方法解析
2020/02/20 Python
python 贪心算法的实现
2020/09/18 Python
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
在线课程:Skillshare
2019/04/02 全球购物
年终总结会议主持词
2014/03/17 职场文书
雷锋电影观后感
2015/06/10 职场文书
诉讼和解协议书
2016/03/23 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL