1. 程式人生 > >js之單例模式

js之單例模式

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之單例模式