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();
工廠方法模式說明
在面向對象思想編程說明,在具有很多產品(現實世界模型,名稱:類名,成員屬性,及操作方法等)需要初始化,即產品需要創建,并且[實現同一接口時],可以使用工廠方法模式; 第一種模式,有輸入類型錯誤的可能,第二模式,需要用時即創建工廠實例;
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com