1. 简单工厂模式

说明:就是创建一个工厂类,里面实现了所对同一个接口的实现类的创建。

但是好像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. 创建一个工厂类:

function SendFactory() {
this.sender = null;
} SendFactory.prototype.produce = function(type) {
var me = this;
if (type == 'mail') {
me.sender = new MailSender();
} else if (type == 'sms') {
me.sender = new SmsSender();
}
   return me.sender;
}

4. 使用这个工厂类:

var factory = new SendFactory();
var sender = factory.produce('mail'); //sms
sender.to = 'toName#mail.com';
sender.title = '邮件测试标题!';
sender.content = '发送内容';
sender.send();

2. 多个工厂方法模式

说明:多个工厂模式方法,是对普通工厂方法的改进,因为返回实现是依据传进去的字符返回,当字符输入错误,可能就无法处理,或是处理成错误的方式; 而多个工厂模式方法,就可以避免这样的错误;

我们对上面的工厂类进行改进:

function SendFactory() {
this.sender = null;
} SendFactory.prototype.produceMail = function() {
var me = this;
me.sender = new MailSender();
return me.sender;
} SendFactory.prototype.produceSms = function() {
var me = this;
me.sender = new SmsSender();
return me.sender;
}

使用方法:

var factory = new SendFactory();
var sender = factory.produceSms(); //produceMail
sender.to = 'toName#xxxxx';
sender.title = '短信发送方法标题';
sender.content = '发送内容';
sender.send();

3. 静态工厂方法模式

说明:将上面的 多个工厂方法模式 的方法改为静态标识即可,使之不必对 SendFactory 进行实例化;

将工厂类代码修改如下:

var SendFactory = {
produceMail : function() {
return new MailSender();
},
produceSms : function() {
return new SmsSender();
}
}

使用方法:

var sender = SendFactory.produceMail();
sender.to = 'toName#mail.com';
sender.title = '邮件发送标题';
sender.content = '发送内容';
sender.send();

工厂方法模式说明

在面向对象思想编程说明,在具有很多产品(现实世界模型,名称:类名,成员属性,及操作方法等)需要初始化,即产品需要创建,并且[实现同一接口时],可以使用工厂方法模式; 第一种模式,有输入类型错误的可能,第二模式,需要用时即创建工厂实例;

最新文章

  1. 叫板OpenStack:用Docker实现私有云
  2. Python 一些总结和比较
  3. Cheminformatic Set
  4. c#之第二课
  5. c# r3 inline hook
  6. pptp建立vpn
  7. 使用Jconsole监控weblogic的配置方法
  8. (八)C语言结构体和指针
  9. C#实现数字字符串左补齐0的3种方法
  10. SQL Server查询性能优化——堆表、碎片与索引(二)
  11. Android执行shell命令
  12. hadoop_集群安装_2
  13. Memcached 使用与简单监测
  14. sqlite学习笔记5:插入数据,查询数据和删除数据
  15. Echarts柱状图实现不同颜色渐变色
  16. 带你由浅入深探索webpack4(一)
  17. SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件
  18. 转:C#使用Dotfuscator混淆代码的加密方法
  19. grep init 与 grep [i]nit
  20. weex 开发踩坑日记--环境配置、安卓运行、adb、开发

热门文章

  1. SQLAlchemy 中文文档翻译计划
  2. UEdit初始化加载内容偶尔失败,解决
  3. Azure 上为Liunx VM 挂载File类型的存储。
  4. Linked List Cycle
  5. MIT jos 6.828 Fall 2014 训练记录(lab 1)
  6. 初识selenium-grid
  7. HDU 5025 Saving Tang Monk --BFS
  8. JavaWeb学习----http协议
  9. main方法的理解
  10. 会报编译器警告的Xcode 6.3新特性:Nullability Annotations