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 相关文章推荐
学习ExtJS Column布局
Oct 08 Javascript
JQuery 文本框使用小结
May 22 Javascript
Js 弹出框口并返回值的两种常用方法
Dec 30 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
Dec 05 Javascript
js获取url中"?"后面的字串方法
May 15 Javascript
chrome下jq width()方法取值为0的解决方法
May 26 Javascript
JavaScript返回0-1之间随机数的方法
Apr 06 Javascript
聊聊JavaScript如何实现继承及特点
Apr 07 Javascript
使用JavaScript实现一个小程序之99乘法表
Sep 21 Javascript
微信小程序实现多个按钮的颜色状态转换
Feb 15 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
Aug 27 Javascript
手把手15分钟搭一个企业级脚手架
Sep 16 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
从wamp到xampp的升级之路
2015/04/08 PHP
php实现将任意进制数转换成10进制的方法
2015/04/17 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
[29:10]Ti4 冒泡赛第二天 NEWBEE vs Titan 3
2014/07/15 DOTA
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
web.py在模板中输出美元符号的方法
2014/08/26 Python
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
学校出纳员岗位职责
2014/03/18 职场文书
检讨书1000字
2014/10/11 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
Redis读写分离搭建的完整步骤
2021/09/14 Redis
Redis 限流器
2022/05/15 Redis
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers