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 相关文章推荐
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
Apr 26 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
May 05 Javascript
JavaScript学习笔记之基础语法
Jan 22 Javascript
jQuery实现简单的间隔向上滚动效果
Mar 09 Javascript
jquery动态创建div与input的实例代码
Oct 12 Javascript
JS实现的全排列组合算法示例
Oct 09 Javascript
javascript实现循环广告条效果
Dec 12 Javascript
浅谈webpack 自动刷新与解析
Apr 09 Javascript
详解Vue中watch的高级用法
May 02 Javascript
浅谈ng-zorro使用心得
Dec 03 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
Dec 26 Javascript
如何实现echarts markline标签名显示自己想要的
Jul 20 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中数据的批量导入(csv文件)
2006/10/09 PHP
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
50个比较实用jQuery代码段
2011/09/18 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
python抓取京东商城手机列表url实例代码
2013/12/18 Python
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
Vs Code中8个好用的python 扩展插件
2020/10/12 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
店长岗位的工作内容
2013/11/12 职场文书
企划经理的岗位职责
2013/11/17 职场文书
党员党性分析材料
2014/02/17 职场文书
地理教师岗位职责
2014/03/16 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书
mysql中between的边界,范围说明
2021/06/08 MySQL
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers