zoukankan      html  css  js  c++  java
  • js之单例模式

    单例模式是指一个类,只有一个实例。实现的思路是,创建实例时候加判断,如果有实例则返回,如果没有就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);
  • 相关阅读:
    django报错问题解决
    django2-项目实战
    django1-环境搭建与开始
    python学习-模块与包(九)
    逆水行舟,不进则退
    待学习规划内容
    越来越强大法则
    windows下安装scoop
    pytest+allure生成测试报告
    Angular vscode 调试
  • 原文地址:https://www.cnblogs.com/yadiblogs/p/9433836.html
Copyright © 2011-2022 走看看