js 設計模式學習(單例 工廠 訂閱 策略)

2021-08-30 02:15:29 字數 3286 閱讀 5690

把好的例子總結(抄)了下

下面這個例子就是只生成乙個mask,用到了閉包

參考

var singleton = function( fn )

}var createmask = singleton( function())

/*basic singleton*/

var singleton = ,

method2:function(){}

};

還有上面這種,是最簡單的,只提供了乙個介面,原來寫元件的時候經常用到對不對

參考:

//basketball base class  

var baseketball = function()

baseketball.prototype = ,

getballsize : function()

} //football base class

var football = function()

football = function(),

getballsize = function()

} //sport factory

var sportsfactory = function(name)

} //when you want football

var football = sportsfactory('wordcup');

console.log(football);

console.log(football.intro);

football.getmember();

參考:

var dp = require("./designpattern.js");

function cpufactory()

function intelcpu() ;

}function amdcpu() ;

}function provider()

function intercpufactory() ;

}function amdcpufactory() ;

}var cpufactory = new intercpufactory();

var intelcpu = cpufactory.createcpufactory();

intelcpu.createcpu();

cpufactory = new amdcpufactory();

var amdcpu = cpufactory.createcpufactory();

amdcpu.createcpu();

喜歡這個例子,然後看這個例子的時候,發現這個博主寫的都很好 先紀錄下

參考:

var pubsub = {};   // 定義發布者

(function (q)

settimeout(function ()

}, 0);

return true;

};//訂閱方法,由訂閱者來執行

q.subscribe = function (type, func)

// token相當於訂閱者的id,這樣的話如果退訂,我們就可以針對它來知道是誰退訂了。

var token = (++subuid).tostring();

// 每訂閱乙個,就把它存入到我們的陣列中去

list[type].push();

return token;

};//退訂方法

q.unsubscribe = function (token) }}

}return false;

};} (pubsub));

//將訂閱賦值給乙個變數,以便退訂

var girla = pubsub.subscribe('js類的文章', function (type, content) );

var girlb = pubsub.subscribe('js類的文章', function (type, content) );

var girlc = pubsub.subscribe('js類的文章', function (type, content) );

//發布通知

pubsub.publish('js類的文章', '關於js的內容');

// 輸出:

//girla退訂了關於js類的文章

settimeout(function () , 0);

//再發布一次,驗證一下是否還能夠輸出資訊

pubsub.publish('js類的文章', "關於js的第二篇文章");

// 輸出:

算是自己真正用過的模式了,就是一看到大量if 或者switch這種分支,可以考慮用這個模式

參考:

// 對於vip客戶

function vipprice()

vipprice.prototype.getprice = function(price)

// 對於老客戶

function oldprice()

oldprice.prototype.getprice = function(price)

// 對於普通客戶

function price()

price.prototype.getprice = function(price)

// 上下文,對於客戶端的使用

function context()

context.prototype.set = function(name, strategy, price)

context.prototype.getresult = function()

var context = new context();

var vip = new vipprice();

context.set ('vip客戶', vip, 200);

context.getresult(); // vip客戶 的結賬價為: 100

var old = new oldprice();

context.set ('老客戶', old, 200);

context.getresult(); // 老客戶 的結賬價為: 60

var price = new price();

context.set ('普通客戶', price, 200);

context.getresult(); // 普通客戶 的結賬價為: 200

js學習設計模式 單例模式

單例模式 保證乙個類有且僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式非常常用,也很容易掌握。很多物件我們通常只需要乙個。執行緒池,全域性快取,瀏覽器中的window物件,登陸視窗等。var singleton function name singleton.prototype.getnam...

設計模式 單例模式 工廠模式

1.單例設計模式 乙個類中只能有乙個物件 分為 懶漢單例模式和餓漢單例模式 懶漢單例模式 1.私有化構造器 2.宣告本類引用的型別,不要去指向物件 3.提供乙個公共靜態的方法,為外部提供物件,先判斷引用型別是否為物件,如果不是,則引用指 向乙個new 類名 並返回 如果有就返回這個引用 public...

設計模式(工廠模式,單例模式)

設計模式設計模式 gof gang of four 設計模式是指前人在長期的開發經驗中 總結出來的一套用於解決特定問題的套路 設計模式原則 1 工廠模式 示例 工廠模式思想 靜態工廠模式 author whd public abstract class carclass benz extends c...