javascript抽象工厂模式详细说明


Posted in Javascript onDecember 16, 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编程起步(第四课)
Feb 27 Javascript
JS画线(实例代码)
Nov 20 Javascript
从零学JS之你需要了解的几本书
May 19 Javascript
js+html5实现canvas绘制镂空字体文本的方法
Jun 05 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
微信小程序支付前端源码
Aug 29 Javascript
微信小程序中如何计算距离某个节日还有多少天
Jul 15 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
Jul 22 Javascript
Js代码中的span拼接问题解决
Nov 22 Javascript
JavaScript ES6 Class类实现原理详解
May 08 Javascript
如何用JS模拟实现数组的map方法
Jul 30 Javascript
Antd的table组件表格的序号自增操作
Oct 27 Javascript
node.js中的fs.statSync方法使用说明
Dec 16 #Javascript
node.js中的fs.stat方法使用说明
Dec 16 #Javascript
node.js中的fs.realpathSync方法使用说明
Dec 16 #Javascript
node.js中的fs.realpath方法使用说明
Dec 16 #Javascript
node.js中的fs.renameSync方法使用说明
Dec 16 #Javascript
node.js中的fs.rename方法使用说明
Dec 16 #Javascript
关于Javascript加载执行优化的研究报告
Dec 16 #Javascript
You might like
社区(php&&mysql)三
2006/10/09 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
一个简单的javascript类定义例子
2009/09/12 Javascript
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
js实现简单扫雷
2020/11/27 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
举例讲解Python中的算数运算符的用法
2015/05/13 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
解析python的局部变量和全局变量
2019/08/15 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
竞选班长演讲稿
2013/12/30 职场文书
房地产开发计划书
2014/01/10 职场文书
销售目标责任书
2014/07/23 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
个人创业事迹材料
2014/12/30 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
自荐信模板大全
2015/03/27 职场文书
python控制台打印log输出重复的解决方法
2021/05/14 Python
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle