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 相关文章推荐
基于jQuery实现点击同时更改两个iframe的网址
Jul 01 Javascript
很好用的js日历算法详细代码
Mar 07 Javascript
jQuery中change事件用法实例
Dec 26 Javascript
讲解JavaScript中for...in语句的使用方法
Jun 03 Javascript
ES6新特性六:promise对象实例详解
Apr 21 Javascript
React Native 环境搭建的教程
Aug 19 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
深入理解node.js http模块
Jan 24 Javascript
详解vue2.0 资源文件assets和static的区别
Nov 27 Javascript
layui实现数据表格点击搜索功能
Mar 26 Javascript
layer更改皮肤的实现方法
Sep 11 Javascript
Vue 实现拨打电话操作
Nov 16 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
php使用PDO方法详解
2014/12/27 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
Javascript中call与apply的学习笔记
2014/09/22 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
原生js制作日历控件实例分享
2016/04/06 Javascript
jQuery动态创建元素以及追加节点的实现方法
2016/10/20 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
tsconfig.json配置详解
2019/05/17 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
Python集合操作方法详解
2020/02/09 Python
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
杭州时比特电子有限公司SQL
2013/08/22 面试题
机械设计专业应届生求职信
2013/11/21 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
出国签证在职证明
2014/01/16 职场文书
仓库组长岗位职责
2014/01/29 职场文书
中专生毕业个人鉴定
2014/02/26 职场文书
学习教师敬业奉献模范事迹材料思想汇报
2014/09/19 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
统计员岗位职责范本
2015/04/14 职场文书
义诊活动通知
2015/04/24 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
优秀大学生申请书
2019/06/24 职场文书
使用Java去实现超市会员管理系统
2022/03/18 Java/Android
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL