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获取Url里的参数
Dec 18 Javascript
js实现禁止中文输入的方法
Jan 14 Javascript
Js+php实现异步拖拽上传文件
Jun 23 Javascript
js时间戳转为日期格式的方法
Dec 28 Javascript
js阻止移动端页面滚动的两种方法
Jan 25 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
解决vue中修改了数据但视图无法更新的情况
Aug 27 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
Jun 06 Javascript
JavaScript实现单图片上传并预览功能
Sep 30 Javascript
微信小程序连续签到7天积分获得功能的示例代码
Aug 20 Javascript
原生JavaScript实现拖动校验功能
Sep 29 Javascript
react中props 的使用及进行限制的方法
Apr 28 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 彩色文字实现代码
2009/06/29 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
JS常用知识点整理
2017/01/21 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
npm qs模块使用详解
2020/02/07 Javascript
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
python实现kMeans算法
2017/12/21 Python
Python元字符的用法实例解析
2018/01/17 Python
Python3实现的简单验证码识别功能示例
2018/05/02 Python
Python实现的读写json文件功能示例
2018/06/05 Python
Python实现注册、登录小程序功能
2018/09/21 Python
python 杀死自身进程的实现方法
2019/07/01 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
2019/08/05 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
幼儿园元旦家长感言
2014/02/27 职场文书
百日安全生产活动总结
2014/07/05 职场文书
电话客服工作职责
2014/07/27 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA