js之單例模式
阿新 • • 發佈:2018-08-07
getmenu pro iter urn null 實現 ole prot 賦值
單例模式是指一個類,只有一個實例。實現的思路是,創建實例時候加判斷,如果有實例則返回,如果沒有就new一個,並返回。
第一步: 創建類。
function Waiter(id, name, salary) { // 創建了一個Waiter類
Employees.call(this, id, name, salary) // 這裏Waiter繼承了Employees,Employees是個父類,也可以沒有
}
Waiter.prototype = Object.create(Employees.prototype);
Waiter.prototype.constructor = Waiter;
Waiter.prototype.work = function (arg) { // 重寫原型上的方法
if (arg instanceof Array){ //數組的話,記錄點菜
console.log(‘finish order dish $記錄work‘);
return this;
} else { //上菜行為
console.log(‘finish serving a dish $記錄work‘)
}
};
// cook調用的方法,返回菜單
Waiter.prototype.tellCookTheMenu = function () {
return this.menu;
};
// cook調用的方法,拿到做好的菜
Waiter.prototype.serving = function () {
this.work();// 上菜行為
this.customer.eat();
};
第二步:使用return結果,這裏有判斷。
return {
name: ‘waiter‘,
getWaiterInstance: function (...arg) {
if (!waiter) {
waiter = new Waiter(...arg)
}
return waiter;
}
}
第三部:將1、2整合
//服務員 單例
var waiterSingle = (function () { // 是一個立即執行函數,並將執行的結果賦值給waiterSingle
var waiter = null; // 實例存在這個變量裏
function Waiter(id, name, salary) {
Employees.call(this, id, name, salary)
}
Waiter.prototype = Object.create(Employees.prototype);
Waiter.prototype.constructor= Waiter;
Waiter.prototype.work = function (arg) { // 重寫原型上的方法
if (arg instanceof Array){ //數組的話,記錄點菜
console.log(‘finish order dish $記錄work‘);
return this;
} else { //上菜行為
console.log(‘finish serving a dish $記錄work‘)
}
};
// cook調用的方法,返回菜單
Waiter.prototype.tellCookTheMenu = function () {
return this.menu;
};
// cook調用的方法,拿到做好的菜
Waiter.prototype.serving = function () {
this.work();// 上菜行為
this.customer.eat();
};
// 從顧客order方法,拿到點的菜
Waiter.prototype.getMenu = function (arg) {
this.customer = arg;
this.menu = arg.dish;
console.log(‘waiter get the menu‘, this.menu);
return this;
};
return {
name: ‘waiter‘,
getWaiterInstance: function (...arg) {
if (!waiter) { // 判斷如果waiter裏沒有,則new,並賦值給waiter
waiter = new Waiter(...arg)
}
return waiter;
}
}
})();
第四步:創建實例方式
var waiter = waiterSingle.getWaiterInstance(2, ‘Lucy‘, 5000);
js之單例模式