設(shè)計模式:代碼經(jīng)驗的總結(jié)
設(shè)計模式都是面向?qū)ο蟮?/p>
工廠模式
工廠函數(shù)就是做一個對象創(chuàng)建的封裝曼玩,并將創(chuàng)建的對象return出去
function newObj(name,age){
var o = new Object();
o.name = name;
o.age = age;
return o;
}
var obj = newObj();
單例模式:只允許存在一個實例的模式
var Instance = (function(){
var obj;
return function(){
if(obj === undefined) obj = new Date();
return obj;
}
})();
var ibs = Instance();
觀察者模式
又稱發(fā)布訂閱者模式,經(jīng)典案例:事件監(jiān)聽祷杈,一個元素同時監(jiān)聽多個同類型事件呀狼,元素對象即為發(fā)布者楼熄,每一個事件處理函數(shù)即為訂閱者恢暖。
策略模式
策略模式的定義是:定義一系列的算法,把它們一個個封裝起來仇奶,并且使它們可以相互替換,從而避免很多if語句比驻,曾經(jīng)學(xué)過最簡單的策略模式雛形就是使用數(shù)組的方式解決傳入數(shù)字得到對應(yīng)星期幾問題的算法该溯。
比如公司的年終獎是根據(jù)員工的工資和績效來考核的,績效為A的人别惦,年終獎為工資的4倍狈茉,績效為B的人,年終獎為工資的3倍掸掸,績效為C的人氯庆,年終獎為工資的2倍
var obj = {
"A": function(salary) {
return salary * 4;
},
"B" : function(salary) {
return salary * 3;
},
"C" : function(salary) {
return salary * 2;
}
};
var calculateBouns =function(level,salary) {
return obj[level](salary);
};
console.log(calculateBouns('A',10000)); // 40000
代理模式
代理模式(Proxy),為其他對象提供一種代理以控制對這個對象的訪問扰付,為了不暴露執(zhí)行對象的部分代碼
//三個對象
//用戶委托快捷方式打開exe
//為了不暴露執(zhí)行對象的部分代碼
//男孩委托快遞小哥給女孩送禮物
var girl = function(name){
this.name = name;
}
//隱藏復(fù)雜堤撵,不愿意修改的的方法
var boy = function(girl){
this.girl = girl;
this.send = function(gift){
alert("你好:"+this.girl.name+",給你一個"+gift);
}
}
var proxyBro = function(girl){
this.send = function(gift){
new boy(girl).send(gift);
}
}
var pro = new proxyBro(new girl("Lisa"));
pro.send("么么噠");
pro.send("玫瑰花");