1. 程式人生 > 實用技巧 >GC常用演算法、常見垃圾收集器

GC常用演算法、常見垃圾收集器

  簡單工廠模式每次新增新需求,不僅要新增類,還要修改工廠函式。每次都要修改兩個地方,這樣太麻煩了,工廠方法模式則可以解決這個問題。

  工廠方法模式本意是說將實際建立物件工作推遲到子類中。這樣核心類就變成了抽象類,但避免有人忽略new關鍵字,我們採用安全模式類。而我們將建立物件的基類放在工廠方法類的原型中。

  

 1 // 工廠方法模式
 2 // 安全模式建立工廠類,避免有人沒寫new關鍵字的情況
 3 var Factory = function(type, content) {
 4     if(this instanceof Factory) {
 5         var s = new
this[type](content); 6 }else { 7 return new Factory(type, content); 8 } 9 } 10 // 工廠原型中設定建立所有型別資料物件的基類 11 Factory.prototype = { 12 Java: function(content) { 13 this.content = content 14 console.log(this.content); 15 }, 16 JavaScript: function(content) {
17 console.log(content); 18 }, 19 UI: function(content) { 20 console.log(content) 21 }, 22 PHP: function(content) { 23 console.log(content); 24 } 25 } 26 // 測試用例 27 var data = [ 28 {type:'JavaScript', content:'JavaScript'}, 29 {type:'Java', content:'Java'},
30 {type:'UI', content:'UI'}, 31 {type:'PHP', content:'PHP'}, 32 ] 33 for(var i=0; i<data.length; i++) { 34 Factory(data[i].type, data[i].content); 35 }

  這樣如果想新增其他類,只需要在Factory這個工廠類的原型裡面新增就可以了。

拓展:

  安全模式類式說可以遮蔽使用這對類的錯誤使用造成的錯誤。

  解決方案是在建構函式開始時先判斷當前的this物件是不是類,如果是則通過new關鍵字建立物件;如果不是說明類在全域性作用域中執行(通常情況下),那麼既然在全域性作用域中執行,當然this就會指向window(通常情況下,如非瀏覽器環境可為其他全域性變數),這樣就要重新返回新建立的物件了。