JavaScript设计模式之抽象工厂模式介绍


Posted in Javascript onDecember 28, 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 相关文章推荐
在网页中使用document.write时遭遇的奇怪问题
Aug 24 Javascript
FusionCharts图表显示双Y轴双(多)曲线
Nov 22 Javascript
javascript实现跳转菜单的具体方法
Jul 05 Javascript
浅析document.ready和window.onload的区别讲解
Dec 18 Javascript
AngularJS的内置过滤器详解
May 14 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
Jan 04 Javascript
浅谈js中test()函数在正则中的使用
Aug 19 Javascript
xcode中获取js文件的路径方法(推荐)
Nov 05 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
Mar 05 Javascript
微信小程序使用wxParse解析html的方法教程
Jul 06 Javascript
layui2.0使用table+laypage实现真分页
Jul 27 Javascript
JavaScript图片旋转效果实现方法详解
Jun 28 Javascript
JavaScript设计模式之单件模式介绍
Dec 28 #Javascript
理解javascript回调函数
Dec 28 #Javascript
JavaScript设计模式之建造者模式介绍
Dec 28 #Javascript
如何编写高质量JS代码
Dec 28 #Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
Dec 28 #Javascript
javascript中定义类的方法汇总
Dec 28 #Javascript
js数组的操作指南
Dec 28 #Javascript
You might like
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
整理Javascript基础入门学习笔记
2015/11/29 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
深入理解python多进程编程
2016/06/12 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
工程概预算专业毕业生求职信
2013/10/04 职场文书
部队领导证婚词
2014/01/12 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
运动会开幕式主持词
2015/07/01 职场文书
安全生产奖惩制度
2015/08/06 职场文书
德能勤绩工作总结
2015/08/11 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
MySQL常见优化方案汇总
2022/01/18 MySQL
java项目构建Gradle的使用教程
2022/03/24 Java/Android