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 相关文章推荐
uploadify 3.0 详细使用说明
Jun 18 Javascript
jquery入门必备的基本认识及实例(整理)
Jun 24 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
Sep 09 Javascript
javascript实现图片自动和可控的轮播切换特效
Apr 13 Javascript
JS中BOM相关知识点总结(必看篇)
Nov 22 Javascript
微信小程序中用WebStorm使用LESS
Mar 08 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
Jul 07 Javascript
js的函数的按值传递参数(实例讲解)
Nov 16 Javascript
webpack打包并将文件加载到指定的位置方法
Feb 22 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
Aug 27 Javascript
记一次vue-webpack项目优化实践详解
Feb 17 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
Apr 17 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 的几个配置文件函数
2006/12/21 PHP
PHP 面向对象 final类与final方法
2010/05/05 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
[01:55]2014DOTA2国际邀请赛快报:国土生病 紧急去医院治疗
2014/07/10 DOTA
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
django 类视图的使用方法详解
2019/07/24 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
异常和异常类的概念
2014/09/12 面试题
建筑工地门卫岗位职责
2014/04/30 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
小学教师求职信范文
2015/03/20 职场文书
夏洛特的网观后感
2015/06/15 职场文书
新郎新娘致辞
2015/07/31 职场文书
优质护理心得体会
2016/01/22 职场文书
党员公开承诺书2016
2016/03/24 职场文书
五年级作文之想象作文
2019/10/30 职场文书
table不让td文字溢出操作方法
2022/12/24 HTML / CSS