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 相关文章推荐
多广告投放代码 推荐
Nov 13 Javascript
jquery validate使用攻略 第四步
Jul 01 Javascript
js判断字符长度以及中英文数字等
Dec 31 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
Jun 23 Javascript
iframe如何动态创建及释放其所占内存
Sep 03 Javascript
JavaScript实现大数的运算
Nov 24 Javascript
JavaScript模板引擎用法实例
Jul 10 Javascript
js实现简单秒表走动的时钟特效
Mar 25 Javascript
Vue组件库发布到npm详解
Feb 17 Javascript
webstorm和.vue中es6语法报错的解决方法
May 08 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
Jun 05 Javascript
解决Vue @submit 提交后不刷新页面问题
Jul 18 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
微信红包随机生成算法php版
2016/07/21 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
javascript 关闭IE6、IE7
2009/06/01 Javascript
Document 对象的常用方法
2009/07/31 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
浅谈javascript中的 “ && ” 和 “ || ”
2017/02/02 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
layui分页效果实现代码
2017/05/19 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
vue2.0 路由模式mode="history"的作用
2018/10/18 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
解决Python使用列表副本的问题
2019/12/19 Python
简述 Python 的类和对象
2020/08/21 Python
美丽的现代设计家具:2Modern
2018/07/26 全球购物
共产党员承诺书
2014/03/25 职场文书
小学数学教研活动总结
2014/07/01 职场文书
报到证办理个人委托书
2014/10/06 职场文书
会计工作态度自我评价
2015/03/06 职场文书
Python基本知识点总结
2022/04/07 Python