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

 更新时间:2014年12月28日 10:31:56   投稿:junjie  
这篇文章主要介绍了JavaScript设计模式之抽象工厂模式介绍,抽象工厂模式就是对功能类单独创建工厂类,这样就不必修改之前的代码,又扩展了功能,需要的朋友可以参考下

抽象工厂模式说明

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 这种语言,没办法这么干,程序员得自律!

相关文章

  • Js切换功能的简单方法

    Js切换功能的简单方法

    很久以前还在学校的时候,在网上看到有的关于js切换的效果我自己会用 很笨拙的方法试着写出来
    2010-11-11
  • 浅析hasOwnProperty方法的应用

    浅析hasOwnProperty方法的应用

    这篇文章主要是对hasOwnProperty方法的应用进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • BootStrap Table前台和后台分页对JSON格式的要求

    BootStrap Table前台和后台分页对JSON格式的要求

    Bootstrap是一款前端非常流行的框架,其中的表格更为大家经常使用。下面通过本文给大家介绍BootStrap Table前台和后台分页对JSON格式的要求,一起看看吧
    2017-06-06
  • JS实现表单验证案例

    JS实现表单验证案例

    这篇文章主要为大家详细介绍了JS实现表单验证案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 基于JavaScript实现轮播图原理及示例

    基于JavaScript实现轮播图原理及示例

    这篇文章主要为大家详细介绍了基于JavaScript实现轮播图原理及示例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • js动态设置关键侦@keyframes的方法技巧

    js动态设置关键侦@keyframes的方法技巧

    这篇文章主要给大家介绍了关于js动态设置关键侦@keyframes的方法技巧,@keyframes规则通过在动画序列中定义关键帧(或waypoints)的样式来控制CSS动画序列中的中间步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • javascript伸缩型菜单实现代码

    javascript伸缩型菜单实现代码

    这是一款真正的JavaScript伸展收缩型菜单,鼠标放上看一看,是不是很酷?鼠标划出菜单项的时候,背景会伸长。菜单没有加链接,想用的自己加,再美化一下,绝对够个性吧。
    2015-11-11
  • 浅谈JavaScript中定义变量时有无var声明的区别

    浅谈JavaScript中定义变量时有无var声明的区别

    这篇文章主要介绍了JavaScript中定义变量时有无var声明的区别分析以及示例分享,需要的朋友可以参考下
    2014-08-08
  • uni-app的pages.json处理方案示例

    uni-app的pages.json处理方案示例

    这篇文章主要为大家介绍了uni-app的pages.json处理方案示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论