工廠模式是一種多重重複性的設計模式
有許多不同建構工廠模式的方法,這篇就先筆記其中一種方法
(另外一種參考資料中的 [5] [6] 裡有)
1. 先建立個簡單的 object
(以建立貓為範例)
function cat(){ this.version='0.3a'; //製作貓的版本 this.make=function(){//設定完成後就可以建立喵星人 alert(this.name); } }
2.建立簡單的品種
(兩種)
cat.create_britshshorthair=function(name){ //建立品種 英國短毛貓 this.name=name; this.type_name='Britsh Short Hair'; alert('英國短毛貓'); //藍寶的品種 } cat.create_britshlonghair=function(name){ //建立品種 英國長毛貓 this.name=name; this.type_name='Britsh Long Hair'; alert('英國長毛貓'); //Lindi的品種 }
3.建立一個喵星人工廠
cat.factory=function(type,name){ if(typeof cat[type] !== 'function'){ throw{ 'name':'error', 'msg':'not exist' } return false; }else{ if(typeof cat[type].prototype !=='function'){ cat[type].prototype=new cat(); } var newobj=new cat[type](name); return newobj; } }
至此簡單的工廠模式已經建立完成!
接著開始製作喵星人!
4.製作一隻短毛與長毛的喵星人
4.製作一隻短毛與長毛的喵星人
var bluebo=cat.factory('create_britshshorthair','bluebo');//建立一隻英國短毛貓 var lindi=cat.factory('create_britshlonghair','lindi');//建立一隻英國長毛貓
如果我們想要再多製作幾隻喵星人,就可以依照想要的類型依上面方式建立。
這樣子每隻由貓工廠製作出來的貓兒都有繼承最上層與中層的資料,
但如果要讓每隻貓兒(或相同類型)同時改變變數的話,
是無法使用 prototype 的方式更改,
如果真的很想讓整間工廠的每個單位都修改,
倒是可以使用 constructor.prototype 指令,
只是可能會有些非預期的資料覆蓋,
看大家寫法似乎是比較不建議使用。
以下是一張工廠模式的結構圖
這樣子每隻由貓工廠製作出來的貓兒都有繼承最上層與中層的資料,
但如果要讓每隻貓兒(或相同類型)同時改變變數的話,
是無法使用 prototype 的方式更改,
如果真的很想讓整間工廠的每個單位都修改,
倒是可以使用 constructor.prototype 指令,
bluebo.constructor.prototype.val='a1';這樣子就會將所有的結構鍊的 val 數值改成 a1
只是可能會有些非預期的資料覆蓋,
看大家寫法似乎是比較不建議使用。
以下是一張工廠模式的結構圖
基本上 LEVEL 3 建立出來的 object 都繼承 LEVEL TOP 與 LEVEL 2 的所有參數。
附上 jsfiddle 的程式碼
http://jsfiddle.net/jim28791/h3gutsdk/1/
簡單筆記其中一種 工廠模式的方法。
參考資料:
沒有留言:
張貼留言