JavaScript设计模式之抽象工厂模式介绍


Posted in Javascript onDecember 28, 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 相关文章推荐
javascript之水平横向滚动歌词同步的应用
May 07 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
May 26 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
Jan 17 Javascript
封装了一个支持匿名函数的Javascript事件监听器
Jun 05 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
Dec 08 Javascript
JS实现DIV容器赋值的方法
Dec 14 Javascript
jquery自定义表单验证插件
Oct 12 Javascript
Javascript 函数的四种调用模式
Nov 05 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
Jan 16 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
Dec 16 Javascript
使用vue重构资讯页面的实例代码解析
Nov 26 Javascript
js中复选框的取值及赋值示例详解
Oct 18 Javascript
JavaScript设计模式之单件模式介绍
Dec 28 #Javascript
理解javascript回调函数
Dec 28 #Javascript
JavaScript设计模式之建造者模式介绍
Dec 28 #Javascript
如何编写高质量JS代码
Dec 28 #Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
Dec 28 #Javascript
javascript中定义类的方法汇总
Dec 28 #Javascript
js数组的操作指南
Dec 28 #Javascript
You might like
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
使用adodb lite解决问题
2006/12/31 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
PHP仿微信发红包领红包效果
2016/10/30 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
jQuery选择器总结之常用元素查找方法
2016/08/04 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
使用vue构建多页面应用的示例
2020/10/22 Javascript
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
python生成随机图形验证码详解
2017/11/08 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
Django实现celery定时任务过程解析
2020/04/21 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
活动志愿者自荐信
2014/01/27 职场文书
《老王》教学反思
2014/02/23 职场文书
一年级评语大全
2014/04/23 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
先进班集体事迹材料
2014/12/25 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
公司门卫岗位职责
2015/04/13 职场文书
迎新生晚会主持词
2015/06/30 职场文书
用Python生成会跳舞的美女
2022/01/18 Python
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记