GC常用演算法、常見垃圾收集器
阿新 • • 發佈:2020-10-16
簡單工廠模式每次新增新需求,不僅要新增類,還要修改工廠函式。每次都要修改兩個地方,這樣太麻煩了,工廠方法模式則可以解決這個問題。
工廠方法模式本意是說將實際建立物件工作推遲到子類中。這樣核心類就變成了抽象類,但避免有人忽略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(通常情況下,如非瀏覽器環境可為其他全域性變數),這樣就要重新返回新建立的物件了。