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 相关文章推荐
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
Dec 25 Javascript
javascript在IE下trim函数无法使用的解决方法
Sep 12 Javascript
js实现屏幕自适应局部代码分享
Jan 30 Javascript
javascript检测两个数组是否相似
May 19 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
Jun 04 Javascript
使用CamanJS在Web页面上处理图像的技巧
Aug 18 Javascript
jQuery如何封装输入框插件
Aug 19 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
Nov 01 Javascript
bootstrap table插件动态加载表头
Jul 19 Javascript
JavaScript事件冒泡机制原理实例解析
Jan 14 Javascript
javascript单张多张图无缝滚动实例代码
May 10 Javascript
vue3.0 加载json的方法(非ajax)
Oct 26 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+APACHE实现网址伪静态
2015/02/22 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
ASP Json Parser修正版
2009/12/06 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
node.js通过url读取文件
2020/10/16 Javascript
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
python实现计算资源图标crc值的方法
2014/10/05 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
Python实现随机漫步功能
2018/07/09 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
Python下opencv图像阈值处理的使用笔记
2019/08/04 Python
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
成教毕业生自我鉴定
2013/10/23 职场文书
升职自荐信
2013/11/28 职场文书
中学门卫岗位职责
2013/12/26 职场文书
社会实践心得体会范文
2016/01/14 职场文书
四年级语文教学反思
2016/03/03 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript