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 相关文章推荐
懒就要懒到底——鼠标自动点击(含时间判断)
Feb 20 Javascript
js操作二级联动实现代码
Jul 27 Javascript
js创建对象的方式总结
Jan 10 Javascript
JS区分浏览器页面是刷新还是关闭
Apr 17 Javascript
jQuery Mobile 触摸事件实例
Jun 04 Javascript
jQuery使用unlock.js插件实现滑动解锁
Apr 04 jQuery
JavaScript使用ZeroClipboard操作剪切板
May 10 Javascript
详解用webpack2搭建angular2的项目
Jun 22 Javascript
vue 实现通过vuex 存储值 在不同界面使用
Nov 11 Javascript
Node.js API详解之 module模块用法实例分析
May 13 Javascript
微信小程序实现左滑删除效果
Nov 18 Javascript
vue3.0中友好使用antdv示例详解
Jan 05 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
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
PHP项目开发中最常用的自定义函数整理
2010/12/02 PHP
PHP实现的简单缓存类
2015/07/29 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
一分钟理解js闭包
2016/05/04 Javascript
vue数据双向绑定原理解析(get & set)
2017/03/08 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
在Python中实现shuffle给列表洗牌
2018/11/08 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
Python中包的用法及安装
2020/02/11 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
美国高街时尚品牌:OASAP
2016/07/24 全球购物
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
银行柜员应聘推荐信范文
2013/11/24 职场文书
学生实习推荐信范文
2013/11/26 职场文书
先进党支部事迹材料
2014/01/13 职场文书
春节请假条
2014/04/11 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
陕西导游词
2015/02/04 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书