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 相关文章推荐
iframe里的页面禁止右键事件的方法
Jun 10 Javascript
JavaScript中的eval()函数使用介绍
Dec 31 Javascript
jQuery检测某个元素是否存在代码分享
Jul 09 Javascript
jQuery获取剪贴板内容的方法
Jun 16 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
Feb 15 Javascript
ES6新特性七:数组的扩充详解
Apr 21 Javascript
Jquery EasyUI $.Parser
Jun 02 jQuery
详解vue-cli 构建Vue项目遇到的坑
Aug 30 Javascript
详解如何在nuxt中添加proxyTable代理
Aug 10 Javascript
react native 仿微信聊天室实例代码
Sep 17 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
Dec 16 Javascript
5种方法告诉你如何使JavaScript 代码库更干净
Sep 15 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动态生成JavaScript代码
2009/03/09 PHP
php error_log 函数的使用
2009/04/13 PHP
php MYSQL 数据备份类
2009/06/19 PHP
PHP模块化安装教程
2016/06/01 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
PDO::getAttribute讲解
2019/01/28 PHP
jQuery代码优化之基本事件
2011/11/01 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
React diff算法的实现示例
2018/04/20 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
python获取豆瓣电影简介代码分享
2014/01/16 Python
在Python下尝试多线程编程
2015/04/28 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
关于python写入文件自动换行的问题
2018/06/23 Python
pyshp创建shp点文件的方法
2018/12/31 Python
python实现年会抽奖程序
2019/01/22 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
教师求职推荐信范文
2013/11/20 职场文书
《草虫的村落》教学反思
2014/02/16 职场文书
办公设备采购方案
2014/03/16 职场文书
联片教研活动总结
2014/07/01 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
安全第一课观后感
2015/06/18 职场文书
python基于turtle绘制几何图形
2021/06/15 Python
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA