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与asp.net(c#)互相调用方法
Dec 13 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
Oct 20 Javascript
jQuery中prevUntil()方法用法实例
Jan 08 Javascript
javascript与css3动画结合使用小结
Mar 11 Javascript
Javascript农历与公历相互转换的简单实例
Oct 09 Javascript
webpack入门必知必会
Jan 16 Javascript
vue实现点击图片放大效果
Aug 15 Javascript
详解Angular6 热加载配置方案
Aug 18 Javascript
Vue中插入HTML代码的方法
Sep 21 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
Oct 28 Javascript
原生js实现each方法实例代码详解
May 27 Javascript
Vue Router的手写实现方法实现
Mar 02 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中cookie的作用域
2008/03/27 PHP
Smarty局部缓存的几种方法简介
2014/06/17 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
laravel入门知识点整理
2020/09/15 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
JS中setTimeout的巧妙用法前端函数节流
2016/03/24 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
python基于Selenium的web自动化框架
2019/07/14 Python
python psutil监控进程实例
2019/12/17 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
师范大学应届生求职信
2013/11/21 职场文书
外出听课学习心得体会
2016/01/15 职场文书
七年级作文之雪景
2019/11/18 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python
SQL SERVER存储过程用法详解
2022/02/24 SQL Server