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 相关文章推荐
纯js实现背景图片切换效果代码
Nov 14 Javascript
Jquery图片滚动与幻灯片的实例代码
Apr 08 Javascript
js动态删除div元素基本思路及实现代码
May 08 Javascript
Easyui Treegrid改变默认图标的方法
Apr 29 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
May 11 Javascript
深入理解Javascript中的自执行匿名函数
Jun 03 Javascript
jQuery插件简单学习实例教程
Jul 01 Javascript
Bootstrap提示框效果的实例代码
Jul 12 Javascript
使用OPENLAYERS3实现点选的方法
Sep 24 Javascript
jQuery中实现text()的方法
Apr 04 jQuery
vue-i18n实现中英文切换的方法
Jul 06 Javascript
vue+iview分页组件的封装
Nov 17 Vue.js
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+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
php中return的用法实例分析
2015/02/28 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
java script编程起步(第三课)
2007/01/10 Javascript
JS加ASP二级域名转向的代码
2007/05/17 Javascript
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
JS实现图片切换特效
2019/12/23 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
英国电气世界:Electrical World
2019/09/08 全球购物
Lentiamo丹麦:购买便宜的隐形眼镜
2021/01/13 全球购物
年度考核自我鉴定
2013/11/09 职场文书
产品销售员岗位职责
2013/12/18 职场文书
煤矿班组长的职责
2013/12/25 职场文书
商务考察邀请函范文
2014/01/21 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
幸福中国演讲稿
2014/09/12 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
生日寿星公答谢词
2015/09/29 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
详解MySQL连接挂死的原因
2021/05/18 MySQL
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python