JS设计模式——5.单体模式】的更多相关文章

JS设计模式——5.单体模式 http://www.cnblogs.com/JChen666/p/3610585.html   单体模式的优势 用了这么久的单体模式,竟全然不知!用它具体有哪些好处呢? 1.可以用它来划分命名空间(这个就是就是经常用的了) 2.利用分支技术来封装浏览器之间的差异(这个还真没用过,挺新鲜) 3.借助单体模式,可以把代码组织的更为一致,方便阅读与维护(这个也用过了) 最基本的单体模式 最简单的单体其实就是一个对象字面量.它把一批有一定关联的方法和属性组织在一起. va…
单体模式作为一种软件开发模式在众多面向对象语言中得到了广泛的使用,在javascript中,单体模式也是使用非常广泛的,但是由于javascript语言拥有其独特的面向对象方式,导致其和一些传统面向对象语言虽然在单体模式的思想上是一致的,但是实现起来还是有差异的.      首先来看看传统面向对象语言对于单体模式的定义:单体模式是只能被实例化一次并且可以通过一个众所周知的访问点来访问的类.这个定义有两点突出了传统面向对象语言的特征,即类和实例化,所以对于传统面向对象语言来讲,单体模式是建立在其类…
单体模式的优势 用了这么久的单体模式,竟全然不知!用它具体有哪些好处呢? 1.可以用它来划分命名空间(这个就是就是经常用的了) 2.利用分支技术来封装浏览器之间的差异(这个还真没用过,挺新鲜) 3.借助单体模式,可以把代码组织的更为一致,方便阅读与维护(这个也用过了) 最基本的单体模式 最简单的单体其实就是一个对象字面量.它把一批有一定关联的方法和属性组织在一起. var Singleton={ name: nimei, age: 2, walk: function(){ ... }, eat:…
js设计模式——7.备忘录模式 /*js设计模式——备忘录模式*/ // 备忘类 class Memento { constructor(content) { this.content = content; } getContent() { return this.content; } } // 备忘列表 class CarTaker { constructor() { this.list = []; } add(memento) { this.list.push(memento); } get…
js设计模式——6.模板方法模式与职责链模式 职责链模式…
js设计模式——5.状态模式 代码演示 /*js设计模式——状态模式*/ // 状态(红灯,黄灯,绿灯) class State { constructor(color) { this.color = color; } handle(context) { console.log(`turn to ${this.color} light`); context.seState(this); } } // 主体 class Context { constructor() { this.state =…
js设计模式——4.迭代器模式 代码演示 /*js设计模式——迭代器模式*/ class Iterator { constructor(container) { this.list = container.list; this.index = 0; } // next 判断下一项还有则继续追加 next() { if (this.hasNext()) { return this.list[this.index++]; } return null; } // hasNext 判断是否还有下一项 h…
js设计模式——2.外观模式…
js设计模式——1.代理模式 以下是代码示例 /*js设计模式——代理模式*/ class ReadImg { constructor(fileName) { this.fileName = fileName; this.loadFromDisk(); // 初始化即从硬盘中加载,模拟 } // display 对外提供一个方法 display() { console.log('display...' + this.fileName); } loadFromDisk() { console.lo…
主要内容: js中最基本.应用最广的模式就是单体模式,实现原理是将代码组织为一个逻辑单元,这个逻辑单元中的代码可以通过单一的变更进行访问,确保对象只存在一份实例. 单体模式的特点: 在网页中使用全局变量具有较大的风险,而且可能存在后续变量创建有引起冲突的可能,单体模式则是清除这些全局变量的最佳手段之一. 1.简单单体模式: 最简单的单体其实就是一个对象字面量,它把一些有一定关联的方法和属性以键值对的方式组织在一起.如图: 只能创建一个实例, var singleton = { attr1:tru…
一入前端深似海,刚入前端,以为前端只是div+css布局外加jquery操作DOM树辣么简单.伴随着对前端学习的深入,发现前端也是博大精深,而且懂得越多,才发现自己越无知,所以一定不能停下脚步的学习.原来前端也有设计模式,那么开始了解吧! 今天来学最简单的单体模式,其实就是简单的Object扩展 var calcYourShengXiao={ solar : ["甲","乙","丙","丁","午",&qu…
单体是一个用来划分命名空间并将一些相关的属性与方法组织在一起的对象,如果她可以被实例化的话,那她只能被实例化一次(她只能嫁一次,不能二婚). 单体模式是javascript里面最基本但也是最有用的模式之一. 特点:1. 可以用来划分命名空间,从而清除全局变量所带来的危险或影响. 2. 利用分支技术来来封装浏览器之间的差异.   3. 可以把代码组织的更为一体,便于阅读和维护. 单体模式的基本写法: /* 最基本的单体模式 */ var her = { name: 'Anna', sex: 'wo…
单体模式 1. js最简单的单体模式 对象字面量:把一批有一定关联的方法和属性组织在一起 // 对象字面量 var Singleton = { attr1: true, attr2: 10, method1: function() {}, method2: function(arg) {} } // 配合命名空间 var GiantCorp = {} GiantCorp.Singleton = {...} 2. 拥有私有成员的单体 2.1 使用下划线 下面实现一个单体用于对字符串进行分割并返回分…
简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料机,要咖啡还是牛奶取决于你按哪个按钮. var Car = (function () { var Car = function (model, year, miles) { this.model = model; this.year = year; this.miles = miles; }; re…
说在前面:这是我近期开发或者看书遇到的一些点,觉得还是蛮重要的. 一.为你的 JavaScript 对象提供命名空间 <!DOCTYPE html> <html> <head> <title>为自己的js对象提供命名空间</title> </head> <body> <div>封装自己的数据和函数,防止和其他的库搞混了</div> <script> var jscbObject = {…
一.js面向对象程序 var o1 = new Object();     o1.name = "宾宾";     o1.sex = "男";     o1.age = "27"; o1.msg = function(){     console.log("姓名:"+this.name+"  性别:"+this.sex+"  年龄:"+this.age); }   var o2 = ne…
基本用法 function Car(model, year, miles) { this.model = model; this.year = year; this.miles = miles; this.output= function () { return this.model + "走了" + this.miles + "公里"; }; } var tom= new Car("大叔", 2009, 20000); var dudu= ne…
在JS中创建对象会习惯的使用new关键字和类构造函数(也是可以用对象字面量). 工厂模式就是一种有助于消除两个类依赖性的模式. 工厂模式分为简单工厂模式和复杂工厂模式,这篇主要讲简单工厂模式. 简单工厂模式:使用一个类来生成实例. 复杂工厂模式:使用子类来决定一个成员变量应该是哪个具体的类的实例. 简单工厂模式: 常用对象方法创建和调用 var BallShop = function(){}; BallShop.prototype = { sellBall : function(model){…
1 什么是工厂模式? 工厂模式是用来创建对象的一种最常用的设计模式.我们不暴露创建对象的具体逻辑,而是将将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂.工厂模式根据抽象程度的不同可以分为: 简单工厂模式 工厂方法模式 抽象工厂模式 1-1 简单工厂模式 简单工厂模式,又叫静态工厂方法,由一个工厂对象来决定创建某一种产品对象类的实例,主要用来创建同一类对象. var basketball = function(){ this.title = '篮球'; } basketball.prot…
单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如全局缓存,window对象.单例模式在js开发中单例模式的用途非常广泛,比如页面中有一个登录浮窗,无论单击多少次登录窗口,这个窗口只会创建一次,那么这个窗口就适合用单例模式来创建. 1.单例模式实例: 要实现单例模式并不复杂,无非是用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次取该类实例的时候,之间返回之前创建的对象. var Sign=function(name){ this.name=name; this.ins…
0.前言 看设计模式比较痛苦,一则是自己经验尚浅,不能体会到使用这些设计模式的益处:二则是不能很好把握使用这些设计模式的时机.所以这一部分看得断断续续,拖拖拉拉,为了了却这快心病,决定最近一口气看完几种常见的设计模式.今天就从桥接模式开始吧. 1.使用情况 最常用于事件监控上,也通过桥接联接多个类 1.1.事件监控 //错误的方式 //这个API根据事件监听器回调函数的工作机制,事件对象被作为参数传递给这个函数.本例中并没有使用这个参数,而只是从this对象获取ID. addEvent(elem…
概念 为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使子系统更加容易使用. 外观模式在JS中,可以认为是一组函数的集合. 实现 // 三个处理函数 function start() { console.log('start'); } function doing() { console.log('doing'); } function end() { console.log('end'); } // 外观函数,将一些处理统一起来,方便调用 function execute()…
工厂模式 本章讨论两种工厂模式: 简单工厂模式 使用一个类(通常是一个单体)来生成实例. 使用场景:假设你想开几个自行车商店(创建自行车实例,组装它,清洗它,出售它),每个店都有几种型号的自行车出售. /*=====================实现车==========================*/ var Bicycle = new Interface('Bicycle', ['assemble', 'wash', 'ride', 'repair']);//Interface见2.初…
为啥将两种模式放在一起呢?因为这样文章比较长啊. 写博客的目的我觉得首要目的是整理自己的知识点,进而优化个人所得知识体系.知识成为个人的知识,就在于能够用自己的话表达同一种意义. 本文是设计模式系列文章的第二篇文章,第一篇:. 1,代理模式,只是学习了虚拟代理以及缓存代理,具体案例 1)虚拟代理 //业务代码 var myImage = (function() { var imgNode = document.createElement("img"); document.body.ap…
一.前言 发布订阅模式,基于一个主题/事件通道,希望接收通知的对象(称为subscriber)通过自定义事件订阅主题,被激活事件的对象(称为publisher)通过发布主题事件的方式被通知. 就和用户订阅微信公众号道理一样,一个公众号可以被多个用户同时订阅,当公众号有新增内容时候,只要发布就好了,用户就能接收到最新的内容. js中的事件监听机制就是一种观察者模式. 二.和观察者模式的区别 观察者模式:一个对象(称为subject)维持一系列依赖于它的对象(称为observer),将有关状态的任何…
享元模式实际上是一种优化模式,目的在于提高系统的性能和代码的效率. 使用享元模式的条件:最重要的条件是网页中必须使用了大量资源密集型对象,如果只会用到了少许这类对象,那么这种优化并不划算.第二个条件是这些对象中所保存的数据至少有一部分能被转换为外在的数据.最后一个条件是,将外在的数据分离出去以后,独一无二的对象的数目相对减少. 使用享元模式的步骤:1.将所有外在的数据从目标类剥离.2.创建一个用来控制该类的实例化工厂.3.创建一个用来保存外在数据的管理器. 实例:工具提示对象.(Tooltip)…
前言 本系列文章主要根据<JavaScript设计模式与开发实践>整理而来,其中会加入了一些自己的思考.希望对大家有所帮助. 概念 发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状 态发生改变时,所有依赖于它的对象都将得到通知. 场景 DOM事件 document.body.addEventListener('click', function () { alert(2); }, false); document.body.addEventListener('cl…
发布—订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.在javascript开发中,一般用事件模型来替代传统的发布—订阅模式.本文将详细介绍发布订阅模式 现实事例 不论是在程序世界里还是现实生活中,发布—订阅模式的应用都非常广泛 比如,小明最近看上了一套房子,到了售楼处之后才被告知,该楼盘的房子早已售罄.好在售楼处工作人员告诉小明,不久后还有一些尾盘推出,开发商正在办理相关手续,手续办好后便可以购买.但到底是什么时候,目前还没有…
迭代器模式 要解决的问题 迭代器要解决的问题很简单很单纯,就是进行遍历操作. 实现原理 基本所有语言都实现了迭代器,javascript也不例外,如Array.prototype.forEach,for..of..,for..in..,for 迭代器的种类分两种,内部迭代器,外部迭代器. 内部迭代器 内部迭代器的迭代过程对外部是不可控的,内部自己实现迭代过程.比如forEach, jQuery中的$.each 外部迭代器 外部迭代器就相对灵活,可以控制迭代过程,需要显式调用迭代操作.外部迭代器较…
代理模式 解决哪一类问题 从字面意思上理解,代理模式解决对一个对象的直接访问,这种直接访问可能是"不方便"的,所谓"不方便"可能是直接访问成本比较大(在前端领域通常是要获取后台数据或者执行复杂的计算),或者需要对原始对象进行一些修饰或处理. 实现原理 实现一个代理对象,这个代理对象和原对象对外暴露相同的接口,用户直接操作代理对象,对于说对用户是透明的,用户并不知道有代理存在. 虚拟代理 把一些昂贵的操作放在代理对象中进行,现在体会的还不是很深刻,具体例子没想好,以后…