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 工具库 Cloudgamer JavaScript Library v0.1 发布
Oct 29 Javascript
js制作的鼠标悬浮时产生的下拉框效果
Oct 27 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
Nov 23 Javascript
浅谈js的setInterval事件
Dec 05 Javascript
AngularJS基础学习笔记之表达式
May 10 Javascript
Javascript中实现String.startsWith和endsWith方法
Jun 10 Javascript
Javascript Function.prototype.bind详细分析
Dec 29 Javascript
node.js中EJS 模板快速入门教程
May 08 Javascript
全面解析Node.js 8 重要功能和修复
Jun 02 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
Jul 13 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
Oct 10 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
Dec 16 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
PHP实现搜索相似图片
2015/09/22 PHP
JavaScript 基础问答三
2008/12/03 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
PyQt5笔记之弹出窗口大全
2019/06/20 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
营销主管自我评价怎么写
2013/09/19 职场文书
音乐器材管理制度
2014/01/31 职场文书
生日宴会主持词
2014/03/20 职场文书
市场营销专业自荐书
2014/06/10 职场文书
厕所文明标语
2014/06/11 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
学生自我评语
2015/01/04 职场文书
人事聘任通知
2015/04/21 职场文书
2015年公务员个人工作总结
2015/04/24 职场文书