1. 簡單工廠模式
說明:就是創(chuàng)建一個工廠類,里面實現(xiàn)了所對同一個接口的實現(xiàn)類的創(chuàng)建。
但是好像JavaScript 好像沒有 接口 這號東西,所以我們?nèi)サ艚涌谶@個層; 當(dāng)然,我們這里的 實現(xiàn)類 下的成員變量,方法應(yīng)該都是一樣的;
例如:這時舉短信發(fā)送跟郵件發(fā)送的例子;
1>. 郵件發(fā)送[實現(xiàn)]類
function MailSender() {
this.to = '';
this.title = '';
this.content = '';
}
MailSender.prototype.send = function() {
//send body
}
2>. 短信發(fā)送[實現(xiàn)]類
function SmsSender() {
this.to = '';
this.title = '';
this.content = '';
}
SmsSender.prototype.send = function() {
//send body
}
3>. 創(chuàng)建一個工廠類:
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 = '郵件測試標(biāo)題!';
sender.content = '發(fā)送內(nèi)容';
sender.send();
2. 多個工廠方法模式
說明:多個工廠模式方法,是對普通工廠方法的改進,因為返回實現(xiàn)是依據(jù)傳進去的字符返回,當(dāng)字符輸入錯誤,可能就無法處理,或是處理成錯誤的方式; 而多個工廠模式方法,就可以避免這樣的錯誤;
我們對上面的工廠類進行改進:
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 = '短信發(fā)送方法標(biāo)題';
sender.content = '發(fā)送內(nèi)容';
sender.send();
3. 靜態(tài)工廠方法模式
說明:將上面的 多個工廠方法模式 的方法改為靜態(tài)標(biāo)識即可,使之不必對 SendFactory 進行實例化;
將工廠類代碼修改如下:
var SendFactory = {
produceMail : function() {
return new MailSender();
},
produceSms : function() {
return new SmsSender();
}
}
使用方法:
var sender = SendFactory.produceMail();
sender.to = 'toName#mail.com';
sender.title = '郵件發(fā)送標(biāo)題';
sender.content = '發(fā)送內(nèi)容';
sender.send();
工廠方法模式說明
在面向?qū)ο笏枷刖幊陶f明,在具有很多產(chǎn)品(現(xiàn)實世界模型,名稱:類名,成員屬性,及操作方法等)需要初始化,即產(chǎn)品需要創(chuàng)建,并且[實現(xiàn)同一接口時],可以使用工廠方法模式; 第一種模式,有輸入類型錯誤的可能,第二模式,需要用時即創(chuàng)建工廠實例;