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 相关文章推荐
js获取IFRAME当前的URL的方法
Nov 13 Javascript
javascript学习笔记(六)数据类型和JSON格式
Oct 08 Javascript
javascript面向对象之访问对象属性的两种方式分析
Jan 13 Javascript
bootstrap读书笔记之CSS组件(上)
Oct 17 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
Mar 30 Javascript
React-Router如何进行页面权限管理的方法
Dec 06 Javascript
图片懒加载imgLazyLoading.js使用详解
Sep 15 Javascript
js技巧之十几行的代码实现vue.watch代码
Jun 09 Javascript
微信小程序自定义组件实现环形进度条
Nov 17 Javascript
JavaScript中的this原理及6种常见使用场景详解
Feb 14 Javascript
express异步函数异常捕获示例详解
Nov 30 Javascript
VUE解决跨域问题Access to XMLHttpRequest at
May 06 Vue.js
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
DHTML Slide Show script图片轮换
2008/03/03 Javascript
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
简单实例处理url特殊符号&处理(2种方法)
2013/04/02 Javascript
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
js实现一键复制功能
2017/03/16 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
小结Python用fork来创建子进程注意事项
2014/07/03 Python
Python3基础之函数用法
2014/08/13 Python
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
Python 处理图片像素点的实例
2019/01/08 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
如何保障Web服务器安全
2014/05/05 面试题
家电业务员岗位职责
2014/03/10 职场文书
创业计划之特色精品店
2019/08/12 职场文书
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
分享几个简单MySQL优化小妙招
2022/03/31 MySQL