加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

javascript抽象工厂模式详细说明

发布时间:2016-11-23 17:48:45 所属栏目:Linux 来源:站长网
导读:抽象工厂模式说明 1. 工厂方法模式的问题: 在工厂方法模式里,创建类都需要通过 工厂类,如果要扩展程序,就必须修改工厂类,这违背了闭包原则,对扩展开放,对修改关闭;对于设计有一定的问题。 nbsp; 2. 如何解决:就要用到抽象工厂模式,就是对功能类单

抽象工厂模式说明

1. 工厂方法模式的问题: 在工厂方法模式里,创建类都需要通过 工厂类,如果要扩展程序,就必须修改工厂类,这违背了闭包原则,对扩展开放,对修改关闭;对于设计有一定的问题。
nbsp;
2. 如何解决:就要用到抽象工厂模式,就是对功能类单独创建工厂类,这样就不必修改之前的代码,又扩展了功能。
nbsp;
3. 工厂模式其实就是对 实现同一接口的 实现类 的 统一 工厂方式创建调用,但 javascript 没有接口这号东西,所以就去掉这一层 实现,但位功能类的成员及方法都应当一样;nbsp;

抽象工厂源码例子

1. 邮件发送类:
nbsp;
复制代码 代码如下:
function MailSender() {
nbsp;nbsp;nbsp; this.to = '';
nbsp;nbsp;nbsp; this.title = '';
nbsp;nbsp;nbsp; this.content = '';
}
MailSender.prototype.send = function() {
nbsp;nbsp;nbsp; //send body
}

2. 短信发送类:
nbsp;
复制代码 代码如下:
function SmsSender() {
nbsp;nbsp;nbsp; this.to = '';
nbsp;nbsp;nbsp; this.title = '';
nbsp;nbsp;nbsp; this.content = '';
}
SmsSender.prototype.send = function() {
nbsp;nbsp;nbsp; //send body
}

3. 这里本来是创建工厂接口类,这里就去掉了; 直接创建各功能类工厂;
nbsp;
1gt;. 邮件工厂类:
nbsp;
复制代码 代码如下:
function MailFactory() {
nbsp;nbsp;nbsp;
}
MailFactory.prototype.produce = function() {
nbsp;nbsp;nbsp; return new MailSender();
}

2gt;. 短信工厂类:

复制代码 代码如下:
function SmsFactory() {
nbsp;nbsp;nbsp;
}
SmsFactory.prototype.produce = function() {
nbsp;nbsp;nbsp; 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# 使用的工厂模式,都用到接口,接口是对外向各种用户暴露的可用方法,说明这个功能应用有些什么的方法应用,用户应该怎么用这个接口。对象以类的形式表现出来,代表现实世界中的某种抽象,也许场景会有很多类似的应用,比如上面的 邮件发送,短信发送,再比如商场中的各种促销手段,以及动物世界中的各种飞禽走兽等..

如果我们不以接口形式提供用户使用,势必提供暴露真实的功能类对象给用户,用户可以随意对类对象进行修改跟扩展,这是不允许的。

工厂方法模式 跟 抽象工厂模式可以很好的解决这样的问题,用户只能使用接口调用工厂类,来进行规定的操作;抽象工厂模式更进一步使用扩展功能变得容易,功能类跟工厂类都在实现相应的接口上实现各自类级别的扩展,不会涉及修改到其他的类或方法;

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读