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插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
Feb 04 Javascript
Javascript无阻塞加载具体方式
Jun 28 Javascript
jquery如何实现锚点链接之间的平滑滚动
Dec 02 Javascript
使用jsonp完美解决跨域问题
Nov 27 Javascript
JS实现模拟风力的雪花飘落效果
May 13 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
Jun 11 Javascript
谈谈JavaScript中function多重理解
Aug 28 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
Sep 14 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
Aug 08 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
Sep 03 Javascript
Echarts之悬浮框中的数据排序问题
Nov 08 Javascript
vue等两个接口都返回结果再执行下一步的实例
Sep 08 Javascript
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 strcmp使用说明
2010/04/22 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
use jscript List Installed Software
2007/06/11 Javascript
常用简易JavaScript函数
2009/04/09 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
2017/06/21 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
vue滚动tab跟随切换效果
2020/06/29 Javascript
Python操作MySQL简单实现方法
2015/01/26 Python
python框架django基础指南
2016/09/08 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
Python标准库itertools的使用方法
2020/01/17 Python
python ssh 执行shell命令的示例
2020/09/29 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
董事长秘书岗位职责
2013/11/29 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
2014年女职工工作总结
2014/11/27 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
春节慰问信范文
2015/02/15 职场文书
法院答辩状格式
2015/05/22 职场文书
党小组考察意见
2015/06/02 职场文书
个人收入证明格式
2015/06/24 职场文书
MySQL中order by的使用详情
2021/11/17 MySQL