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 相关文章推荐
javascritp实现input输入框相关限制用法
Jun 29 Javascript
a标签的href和onclick 的事件的区别介绍
Jul 26 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
Apr 12 Javascript
jQuery表格排序组件-tablesorter使用示例
May 26 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
Apr 10 Javascript
动态创建按钮的JavaScript代码
Jan 29 Javascript
JS动态加载脚本并执行回调操作
Aug 24 Javascript
深入浅析JavaScript中的3DES
Aug 24 Javascript
jQuery实现获取隐藏div高度的方法示例
Feb 09 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
Mar 17 Javascript
解决百度Echarts图表坐标轴越界的方法
Oct 17 Javascript
对layer弹出框中icon数字参数的说明介绍
Sep 04 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
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
用来解析.htgroup文件的PHP类
2012/09/05 PHP
基于php split()函数的用法详解
2013/06/05 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
Python编程中的文件操作攻略
2015/10/16 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
django跳转页面传参的实现
2020/09/17 Python
Django多数据库联用实现方法解析
2020/11/12 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
Intersport西班牙:在线体育商店
2019/11/06 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
毕业学生推荐信
2013/12/01 职场文书
勾股定理课后反思
2014/04/26 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书