javascript抽象工厂模式详细说明


Posted in Javascript onDecember 16, 2014

抽象工厂模式说明

1. 工厂方法模式的问题: 在工厂方法模式里,创建类都需要通过 工厂类,如果要扩展程序,就必须修改工厂类,这违背了闭包原则,对扩展开放,对修改关闭;对于设计有一定的问题。
 
2. 如何解决:就要用到抽象工厂模式,就是对功能类单独创建工厂类,这样就不必修改之前的代码,又扩展了功能。
 
3. 工厂模式其实就是对 实现同一接口的 实现类 的 统一 工厂方式创建调用,但 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. 这里本来是创建工厂接口类,这里就去掉了; 直接创建各功能类工厂;
 
1>. 邮件工厂类:
 

function MailFactory() {

    

}

MailFactory.prototype.produce = function() {

    return new MailSender();

}

2>. 短信工厂类:

function SmsFactory() {

    

}

SmsFactory.prototype.produce = function() {

    return new SmsSender();

}

4. 使用方法:

var factory = new MailFactory();

var sender = factory.produce();

sender.to = 'toname#mail.com';

sender.title = '抽象工厂模式';

sender.content = '发送内容';

sender.send();

其他说明

在面向对象语言如 java,.net C# 使用的工厂模式,都用到接口,接口是对外向各种用户暴露的可用方法,说明这个功能应用有些什么的方法应用,用户应该怎么用这个接口。对象以类的形式表现出来,代表现实世界中的某种抽象,也许场景会有很多类似的应用,比如上面的 邮件发送,短信发送,再比如商场中的各种促销手段,以及动物世界中的各种飞禽走兽等..

如果我们不以接口形式提供用户使用,势必提供暴露真实的功能类对象给用户,用户可以随意对类对象进行修改跟扩展,这是不允许的。

工厂方法模式 跟 抽象工厂模式可以很好的解决这样的问题,用户只能使用接口调用工厂类,来进行规定的操作;抽象工厂模式更进一步使用扩展功能变得容易,功能类跟工厂类都在实现相应的接口上实现各自类级别的扩展,不会涉及修改到其他的类或方法;

Javascript 相关文章推荐
jQuery UI Dialog 创建友好的弹出对话框实现代码
Apr 12 Javascript
js创建一个input数组并绑定click事件的方法
Jun 12 Javascript
Jquery中Event对象属性小结
Feb 27 Javascript
实现无刷新联动例子汇总
May 20 Javascript
JQuery入门基础小实例(1)
Sep 17 Javascript
百度搜索框智能提示案例jsonp
Nov 28 Javascript
JavaScript中匿名函数的递归调用
Jan 22 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
Apr 28 Javascript
微信小程序websocket实现即时聊天功能
May 21 Javascript
jQuery 查找元素操作实例小结
Oct 02 jQuery
原生javascript制作的拼图游戏实现方法详解
Feb 23 Javascript
jQuery 实现扁平式小清新导航
Jul 07 jQuery
node.js中的fs.statSync方法使用说明
Dec 16 #Javascript
node.js中的fs.stat方法使用说明
Dec 16 #Javascript
node.js中的fs.realpathSync方法使用说明
Dec 16 #Javascript
node.js中的fs.realpath方法使用说明
Dec 16 #Javascript
node.js中的fs.renameSync方法使用说明
Dec 16 #Javascript
node.js中的fs.rename方法使用说明
Dec 16 #Javascript
关于Javascript加载执行优化的研究报告
Dec 16 #Javascript
You might like
php fckeditor 调用的函数
2009/06/21 PHP
php 数组的合并、拆分、区别取值函数集
2010/02/15 PHP
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
openPNE常用方法分享
2011/11/29 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
2018/05/24 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
电脑租赁公司创业计划书
2014/01/08 职场文书
教师节活动总结
2014/08/29 职场文书
仓库管理制度范本
2015/08/04 职场文书