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 lazyload延迟加载技术的实现原理分析
Jan 24 Javascript
常见的原始JS选择器使用方法总结
Apr 09 Javascript
基于Jquery easyui 选中特定的tab
Nov 17 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
Sep 17 Javascript
Javascript实现倒计时时差效果
May 18 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
Nov 24 Javascript
微信web端后退强制刷新功能的实现代码
Mar 04 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
Apr 18 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 jQuery
IE9 elementUI文件上传的问题解决
Oct 17 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
Sep 24 Javascript
简单聊聊TypeScript只读修饰符
Apr 06 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实现的DES加密解密类定义与用法示例
2020/11/02 PHP
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
python 合并文件的具体实例
2013/08/08 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
Python内存读写操作示例
2018/07/18 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
零基础小白多久能学会python
2020/06/22 Python
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2012/11/25 面试题
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
shell程序如何生命变量?shell变量是弱变量吗?
2014/11/10 面试题
英语自我评价范文
2014/01/24 职场文书
市三好学生主要事迹
2014/01/28 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
四风查摆剖析材料
2014/10/10 职场文书
工地材料员岗位职责
2015/04/11 职场文书
上课迟到检讨书
2015/05/06 职场文书
同学会感言
2015/07/30 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android