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);
js之单例模式的更多相关文章
- JS实现单例模式的多种方案
JS实现单例模式的多种方案 今天在复习设计模式中的-创建型模式,发现JS实现单例模式的方案有很多种,稍加总结了一下,列出了如下的6种方式与大家分享 大体上将内容分为了ES5(Function)与ES6 ...
- JS的单例模式
维基百科对单例模式的介绍如下: 在应用单例模式时,生成单例的类必须保证只有一个实例的存在,很多时候整个系统只需要拥有一个全局对象,才有利于协调系统整体的行为.比如在整个系统的配置文件中,配置数据有一个 ...
- 2.js模式-单例模式
1. 单例模式 单例模式的核心是确保只有一个实例,并提供全局访问. function xx(name){}; Singleton.getInstance = (function(){ var inst ...
- js设计模式-单例模式
JavaScript中的单例模式是最常用的.最基本的设计模式,它提供了一种命名空间,减少全局变量泛滥的代码管理机制: 1.最常见的单例模式: [javascript] view plain cop ...
- JS设计模式——单例模式剖析
转载于原文地址:https://blog.csdn.net/q1056843325/article/details/52933426 举一个通俗的例子,在页面中点击登录按钮,弹出了一个登录浮窗,这个登 ...
- [js]js设计模式-单例模式
单例模式 不同模块之间需要同时开发, // 单例模式: 把描述同一个事物的属性和方法放在同一个内存空间下. // 优点: 分组,防止冲突 // p1 p2也叫做命名空间(模块开发) var p1 = ...
- js 设计模式——单例模式
单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池.全局缓存.浏览器中的 window 对象等. JavaScript ...
- [转]JS设计模式-单例模式(二)
单例模式是指保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的模式,有一些对象往往只需要一个,比如线程池.全局缓存.浏览器中的window对象等.在javaScript开发中 ...
- js之 单例模式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- 解决Jenkins安装的时区问题
正常情况下,jenkins是Java执行在Java容器,比如tomcat容器之下,只要改了tomcat的时区就行.我这里是为了方便后续的代码可用性测试,用的是Ubuntu中apt在线安装,也只是安装了 ...
- 使用Sybmol模块来构建神经网络
符号编程 在之前的文章,我们介绍了NDArray模块,它是MXNet中处理数据的核心模块,我们可以使用NDArray完成非常丰富的数学运算.实际上,我们完全可以使用NDArray来定义神经网络,这种方 ...
- SpringDataJPA
看着自己弟弟在成都聚全家之力盘一套房, 看着自己二哥,在成都也为车贷房贷奔波劳累,身心俱惫, 生活不易啊,这个社会环境下,就像从数据库拿数据一样,只拿我们想要的,或许会活的滋润很多吧. 最近的这个项目 ...
- Java的BIO,NIO和AIO的区别于演进
作者:公众号:我是攻城师 前言 Java里面的IO模型种类较多,主要包括BIO,NIO和AIO,每个IO模型都有不一样的地方,那么这些IO模型是如何演变呢,底层的原理又是怎样的呢? 本文我们就来聊聊. ...
- Kali学习笔记12:服务扫描
关于什么是服务扫描不多介绍,通俗来看: 我已经扫描到目标机器某个端口开放,接下来我需要知道开放这个端口的是什么应用 情景: 我的Kali机器IP地址:192.168.22.130 我要扫描的Metas ...
- springbean的生命周期
1.Spring对Bean进行实例化(相当于程序中的new Xx())2.Spring将值和Bean的引用注入进Bean对应的属性中3.如果Bean实现了BeanNameAware接口,Spring将 ...
- 微信小程序内嵌网页的一些(最佳)实践
前言 3 个月前,微信小程序推出了 web-view 组件引发了一波小高潮,笔者所在的大前端团队写过一篇浅析,详情可见:浅谈微信小程序前端生态. 我们曾大胆猜想,这一功能,可能直接导致小程序数量增长迎 ...
- SpringMvc参数传递中乱码问题
问题描述: 当传递中文参数到controller类时,无乱是get方式还是post方式都出现乱码 解决: 1.保证所有的页面编码都是utf-8,包括jsp页面,浏览器编码设置和eclipse的编码设置 ...
- TensorflowSharp安装和使用入门
Tensorflow是一个人工智能框架.TensorflowSharp是对Tensorflow C语言版接口的封装,便于C#开发人员在项目中使用Tensorflow. 一.使用方法 Tensorflo ...
- 【原创】STM32工程新建步骤
1. 新建文件夹 DOC文件夹: 可以存放readme.txt等项目文档 Library文件夹: 可以存放ST库源码,直接复制ST库的源代码到Librar ...