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 相关文章推荐
基于JQuery实现鼠标点击文本框显示隐藏提示文本
Feb 23 Javascript
jQuery查询数据返回object和字符串影响原因是什么
Aug 09 Javascript
jquery实现弹出层遮罩效果的简单实例
Mar 03 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
Oct 17 Javascript
JavaScript设置获取和设置属性的方法
Mar 04 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
Mar 11 Javascript
javascript制作2048游戏
Mar 30 Javascript
javascript实现仿IE顶部的可关闭警告条
May 05 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
angular.js+node.js实现下载图片处理详解
Mar 31 Javascript
javascript高级模块化require.js的具体使用方法
Oct 31 Javascript
利用vue重构有赞商城的思路以及总结整理
Feb 21 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分页显示制作详细讲解
2006/10/09 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
JavaScript常用数学函数用法示例
2018/05/14 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
跟老齐学Python之正规地说一句话
2014/09/28 Python
scrapy爬虫实例分享
2017/12/28 Python
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
Python的log日志功能及设置方法
2019/07/11 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
幼儿园家长评语大全
2014/04/16 职场文书
运动会班级前导词
2015/07/20 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
《去年的树》教学反思
2016/02/18 职场文书
总结Python使用过程中的bug
2021/06/18 Python