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 相关文章推荐
javascript之更有效率的字符串替换
Aug 02 Javascript
JavaScript 面向对象编程(2) 定义类
May 18 Javascript
javascript 构造函数强制调用经验总结
Dec 02 Javascript
js中this的用法实例分析
Jan 10 Javascript
jQuery封装的屏幕居中提示信息代码
Jun 08 Javascript
jQuery学习笔记之回调函数
Aug 15 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
Mar 17 Javascript
JSONP基础知识详解
Mar 19 Javascript
浅谈在Vue.js中如何实现时间转换指令
Jan 06 Javascript
js中addEventListener()与removeEventListener()用法案例分析
Mar 02 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
Oct 31 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性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
2015/12/24 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
jQuery 注意事项 与原因分析
2009/04/24 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
[01:05:29]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第二场 1月24日
2021/03/11 DOTA
python如何读写json数据
2018/03/21 Python
Python range与enumerate函数区别解析
2020/02/28 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
教育实习生的自我评价分享
2013/11/21 职场文书
网吧收银员岗位职责
2013/12/14 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
欢度春节标语
2014/07/01 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
Flask搭建一个API服务器的步骤
2021/05/28 Python
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android
方法汇总:Python 安装第三方库常用
2022/04/26 Python
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript