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中length属性的探索
Jul 31 Javascript
解决遍历时Array.indexOf产生的性能问题
Jul 03 Javascript
用JavaScript实现动画效果的方法
Jul 20 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
Aug 14 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
Apr 16 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
Jan 09 Javascript
Vue.js render方法使用详解
Apr 05 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
Jul 14 Javascript
Layui数据表格之获取表格中所有的数据方法
Aug 20 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
Dec 09 Javascript
如何提升vue.js中大型数据的性能
Jun 21 Javascript
VUE Elemen-ui之穿梭框使用方法详解
Jan 19 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
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
php根据用户名和手机号查询是否存在手机号码
2017/02/16 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
ext 代码生成器
2009/08/07 Javascript
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
2011/03/01 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
2018/02/23 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
详解JS预解析原理
2020/06/16 Javascript
python实现发送邮件及附件功能
2021/03/02 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
英国灯具和灯泡网上商店:Lights.co.uk
2018/02/02 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
本科毕业生自我鉴定
2013/11/02 职场文书
中学生团员自我评价分享
2013/12/07 职场文书
大学生职业生涯规划范文
2014/01/22 职场文书
工程师岗位职责规定
2014/02/26 职场文书
文艺晚会主持词
2014/03/24 职场文书
个人承诺书
2014/03/26 职场文书
绿色环保演讲稿
2014/05/10 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
圣诞晚会主持词
2015/07/01 职场文书
关于nginx 实现jira反向代理的问题
2021/09/25 Servers