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 相关文章推荐
js控制div及网页相关属性的代码
Dec 19 Javascript
ExtJs使用IFrame的实现代码
Mar 24 Javascript
jquery json 实例代码
Dec 02 Javascript
浏览器解析js生成的html出现样式问题的解决方法
Apr 16 Javascript
ajax处理php返回json数据的实例代码
Jan 24 Javascript
input链接页面、打开新网页等等的具体实现
Dec 30 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
May 31 Javascript
详解JS中的立即执行函数
Feb 24 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
Nov 22 Javascript
vue中使用微信公众号js-sdk踩坑记录
Mar 29 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
Apr 08 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
Aug 22 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输出九九乘法表代码实例
2015/03/27 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
原生js制作日历控件实例分享
2016/04/06 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
2016/06/17 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python实现Adapter模式实例代码
2018/02/09 Python
python导入模块交叉引用的方法
2019/01/19 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
python实现贪吃蛇双人大战
2020/04/18 Python
Python扫描端口的实现
2021/01/25 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
高中自我评价分享
2013/12/05 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
节水倡议书范文
2014/04/15 职场文书
《长征》教学反思
2014/04/27 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android
Python经常使用的一些内置函数
2022/04/11 Python