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实现二级联动简单实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • 全面讲解CocosCreator热更新

    全面讲解CocosCreator热更新

    这篇文章主要介绍了CocosCreator热更新,热更新是重要的技术,希望你看完文章可以回去实验一下,体会其便捷性
    2021-04-04
  • 关于js的事件循环机制剖析

    关于js的事件循环机制剖析

    JS事件循环机制,最常用到的地方应该是做面试题,经常给出一段代码,让你写出console.log()顺序,下面这篇文章主要给大家介绍了关于js事件循环机制的相关资料,需要的朋友可以参考下
    2021-06-06
  • 一文搞懂JavaScript中最难理解概念之一的闭包

    一文搞懂JavaScript中最难理解概念之一的闭包

    闭包常常被誉为JavaScript中最难理解的概念之一,这篇文章就来带大家深入了解一下JavaScript中闭包的概念、实现与应用,需要的可以参考一下
    2023-04-04
  • openLayer4实现动态改变标注图标

    openLayer4实现动态改变标注图标

    这篇文章主要为大家详细介绍了openLayer4实现动态改变标注图标,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • 纯js实现遮罩层效果原理分析

    纯js实现遮罩层效果原理分析

    这篇文章主要介绍了纯js实现遮罩层效果,下面就它的原理做下分析,感兴趣的朋友可以参考下
    2014-05-05
  • 详解ES6 系列之异步处理实战

    详解ES6 系列之异步处理实战

    这篇文章主要介绍了详解ES6 系列之异步处理实战,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • avaScript基础学习-基本的语法规则

    avaScript基础学习-基本的语法规则

    这篇文章主要介绍了avaScript的语法规则,本文的语法讲解主要讲一下与其他语言的区别,下面详细的介绍内容,需要的小伙伴可以参考一下,希望对你有所帮助
    2022-02-02
  • 密码强度检测效果实现原理与代码

    密码强度检测效果实现原理与代码

    密码强度检测有利于提醒增加密码的安全指数,更好的保护密码安全,接下来介绍密码强度检测效果的实现
    2013-01-01
  • JavaScript轻松创建级联函数的方法示例

    JavaScript轻松创建级联函数的方法示例

    级联函数也叫链式函数,方法链一般适合对一个对象进行连续操作 (集中在一句代码)。一定程度上可以减少代码量,缺点是它占用了 函数的返回值。下面这篇文章主要给大家介绍了利用JavaScript如何轻松创建级联函数的方法示例,需要的朋友可以参考借鉴。
    2017-02-02

最新评论