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 相关文章推荐
索趣科技的答案
Feb 07 Javascript
js 点击按钮弹出另一页,选择值后,返回到当前页
May 26 Javascript
javascript onmouseout 解决办法
Jul 17 Javascript
jquery随意添加移除html的实现代码
Jun 21 Javascript
JS与jQ读取xml文件的方法
Dec 08 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
Jan 27 Javascript
微信小程序之小豆瓣图书实例
Nov 30 Javascript
js仿iphone秒表功能 计算平均数
Jan 11 Javascript
Bootstrap table简单使用总结
Feb 15 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
Dec 06 Javascript
jQuery实现基本隐藏与显示效果的方法详解
Sep 05 jQuery
uniapp微信小程序实现一个页面多个倒计时
Nov 01 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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
加速XP搜索功能堪比vista
2007/03/22 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
js实现简单模态框实例
2018/11/16 Javascript
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
用Python读取几十万行文本数据
2018/12/24 Python
Python中求对数方法总结
2020/03/10 Python
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
银行委托书范本
2014/04/04 职场文书
世界遗产的导游词
2015/02/13 职场文书
小学教师岗位职责
2015/04/02 职场文书
听证会主持词
2015/07/03 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
大学班干部竞选稿
2015/11/20 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript
springboot实现string转json json里面带数组
2022/06/16 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL