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中定义对象类别
Dec 22 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
Apr 02 Javascript
node.js正则表达式获取网页中所有链接的代码实例
Jun 03 Javascript
jquery实现多屏多图焦点图切换特效的方法
May 04 Javascript
javascript实现判断鼠标的状态
Jul 10 Javascript
Bootstrap table表格简单操作
Feb 07 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
Feb 13 jQuery
js删除对象/数组中null、undefined、空对象及空数组方法示例
Nov 14 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
Nov 14 jQuery
React 使用recharts实现散点地图的示例代码
Dec 07 Javascript
Javascript幻灯片播放功能实现过程解析
May 07 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
Sep 11 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
php4的彩蛋
2006/10/09 PHP
PHP 实用代码收集
2010/01/22 PHP
php实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
vue axios登录请求拦截器
2018/04/02 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
python中执行shell命令的几个方法小结
2014/09/18 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
Python PIL图片添加字体的例子
2019/08/22 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
旅游项目开发策划书
2014/01/18 职场文书
房地产财务管理制度
2014/02/02 职场文书
信用社员工先进事迹材料
2014/02/04 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
租房协议书范例
2014/10/14 职场文书
个人专业技术总结
2015/03/05 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
开学典礼致辞
2015/07/29 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python