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 相关文章推荐
js操作iframe的一些方法介绍
Jun 25 Javascript
javascript中全局对象的isNaN()方法使用介绍
Dec 19 Javascript
js仿黑客帝国字母掉落效果代码分享
Nov 08 Javascript
详解AngularJS中自定义过滤器
Dec 28 Javascript
js中获取jsp表单中radio类型的值简单实例
Aug 15 Javascript
AngularJS入门教程之迭代器过滤详解
Aug 18 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
Oct 17 Javascript
Vue和Bootstrap的整合思路详解
Jun 30 Javascript
微信小程序动态生成二维码的实现代码
Jul 25 Javascript
vue使用echarts图表的详细方法
Oct 22 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
Feb 27 Javascript
Postman环境变量全局变量使用方法详解
Aug 13 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个人网站架设连环讲(二)
2006/10/09 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
js同时按下两个方向键
2007/12/01 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
Node.js 使用jade模板引擎的示例
2018/05/11 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
python属于哪种语言
2020/08/16 Python
EJB发布WEB服务一般步骤
2012/10/31 面试题
金融专业个人求职信
2013/09/22 职场文书
移动通信专业自荐信范文
2013/11/12 职场文书
给学校的建议书
2014/03/12 职场文书
文明倡议书范文
2014/04/15 职场文书
图书馆标语
2014/06/19 职场文书
服务行业演讲稿
2014/09/02 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
2014年团委工作总结
2014/11/13 职场文书
2014年招生工作总结
2014/11/26 职场文书
故意杀人案辩护词
2015/05/21 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL