首页 > 代码库 > javascript 之工厂方法模式
javascript 之工厂方法模式
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‘); //smssender.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(); //produceMailsender.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();
工厂方法模式说明
在面向对象思想编程说明,在具有很多产品(现实世界模型,名称:类名,成员属性,及操作方法等)需要初始化,即产品需要创建,并且[实现同一接口时],可以使用工厂方法模式; 第一种模式,有输入类型错误的可能,第二模式,需要用时即创建工厂实例;
javascript 之工厂方法模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。