介绍 迭代器模式(Iterator):提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示。 迭代器的几个特点是: 1.访问一个聚合对象的内容而无需暴露它的内部表示。 2.为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作。 3.遍历的同时更改迭代器所在的集合结构可能会导致问题(比如C#的foreach里不允许修改item)。 正文 一般的迭代,我们至少要有2个方法,hasNext()和Next(),这...
介绍 装饰者提供比继承更有弹性的替代方案。 装饰者用用于包装同接口的对象,不仅允许你向方法添加行为,而且还可以将方法设置成原始对象调用(例如装饰者的构造函数)。 装饰者用于通过重载方法的形式添加新功能,该模式可以在被装饰者前面或者后面加上自己的行为以达到特定的目的。 正文 那么装饰者模式有什么好处呢?前面说了,装饰者是一种实现继承的替代方案。当脚本运行时,在子类中增加行为会影响原有类所有的实例,而装饰者...
介绍 代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下: 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。 代理模式使得代理对象控制具体对象的引用。代理几乎可以是任何对象:文件,资源,内存中的对象,或者是一些难以复制的东西。 正文 我们来举一个简单的例子,假如dudu要送酸奶小妹玫瑰花,却不知道她的联系方式或者不好意思,想委托大叔去送这些玫瑰,那大叔就是个代理(其实挺好的,可以扣几朵...
发布者订阅者模式,是一种很常见的模式,比如: 一、买卖房子 生活中的买房,卖房,中介就构成了一个发布订阅者模式,买房的人,一般需要的是房源,价格,使用面积等信息,他充当了订阅者的角色 中介拿到卖主的房源信息,根据手头上掌握的客户联系信息(买房的人的手机号),通知买房的人,他充当了发布者的角色 卖主想卖掉自己的房子,就需要告诉中介,把信息交给中介发布 二,网站订阅信息的用户 订阅者角色:需要订阅某类信息的网民...
本篇文章给大家分享的是关于JavaScript设计模式系列四:原型模式,有感兴趣的朋友可以看一下本系列代码已上传到GitHub地址JavaScript设计模式demo什么是原型模式原型模式 (Prototype pattern):通俗点讲就是创建一个共享的原型,并通过拷贝这些原型创建新的对象。用于创建重复的对象,这种类型的设计模式属于创建型模式,它提供了一种创建对象的不错选择。实现原型模式我们可以通过JavaScript特有的原型继承特性去实现原型模式,...
本篇文章给大家分享的是JavaScript设计模式系列六:桥接模式 ,有感兴趣的朋友可以看一下桥接模式桥接(Bridge)是用于把抽象化与现实化解耦,使得二者可以独立变化,这种类型的设计模式属于结构型模式,它通过提供抽象化和现实化之间的桥接结构,实现二者的解耦。举个简单的例子var Fn1 = function(a) {// dosomething... } var Fn2 = function(b) {// dosomething... } var Bridge = function(a, b){this.one = new Fn1(a)this...
本片文章给大家分享的是JavaScript设计模式系列五:适配器模式,有感兴趣的朋友可以看一下什么是适配器模式所谓 适配器模式 就是用一个新的接口对现有的接口进行包装,处理类与API的不匹配。使用这种模式的对象又叫作包装器。比如我们有一个接口:function api (x1, x2, x3) {console.log(x1 + x2 + x3); // 用console.log来模拟接口的相关操作 }然后我们有一个对象数据:var obj = {a: 我,b: 很,c: 帅 }我们可以发现,我们的数据...
本篇文章给大家分享了JavaScript设计模式系列八:外观模式,有感兴趣的朋友可以看一下外观模式外观模式是指提供一个统一的接口去访问多个子系统的多个不同的接口,为子系统中的一组接口提供统一的高层接口。使得子系统更容易使用,不仅简化类中的接口,而且实现调用者和接口的解耦。外观模式在我们的日常工作中十分常见。我们来看一个例子:// a.js export default {getA (params) {// do something...} }// b.js export default ...
本篇文章给大家分享的是JavaScript设计模式系列:工厂模式,有感兴趣的朋友可以看一下设计模式设计模式(design pattern)概念:是一套反复使用、思想成熟、经过分类和无数实战设计经验的总结。是为了代码可重用、可扩展、可解耦、更容易被人理解和保证代码可靠性。设计模式共有23种,我今天先来了解一下工厂模式(Factory Pattern),其他的模式将会在后续的博客中陆续为大家讲解。前言:本系列代码已上传GitHub地址https://github...
本篇文章给大家分享的是JavaScript设计模式系列二:单例模式,有感兴趣的朋友可以看一下单例模式前言:本系列代码已上传到GitHub地址 https://github.com/HolyZheng/...什么是单例模式?单例模式的定义:一个类仅有一个实例,并且可以在全局访问。什么时候需要用到单例模式呢?其实单例模式在日常开发中的使用非常的广泛,例如各种浮窗、像登录浮窗等,无论我们点击多少次,都是同一个浮窗,浮窗从始至终只创建了一次。这种场景就十...
本篇文章给大家分享的是JavaScript设计模式系列三:建造者模式,有感兴趣的朋友可以看一下建造者模式建造者模式(builder pattern)比较简单,它属于创建型模式的一种,将一个复杂的对象分解成多个简单的对象来进行构建,将复杂的构建层与表示层分离,使得相同的构建过程可以创建不同的表示的模式便是建造者模式。优点建造者模式的封装性很好,对象本身与构建过程解耦。建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的...
我写的程序员面试系列文章 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Java Marker Interface(标记接口) 使用JDK自带的工具jstack找出造成运行程序死锁的原因 编程面试题:编写一个会造成数据库死锁的应用设计模式(Design Pattern)中的桥接模式,有的朋友平时工作可能很少用到。桥接模式的核心在于将抽象部分和它的实现部分分离,使它们...
简单工厂模式 <!DOCTYPE html> <html><head><meta charset="utf-8"><title></title></head><body><script>// 简单工厂模式function makeCoffee(dou, water) {var obj = new Object()obj.dou = douobj.water = waterobj.bili = obj.dou / obj.waterreturn obj}console.log(makeCoffee(1, 10).bili)console.log(makeCoffee(3, 8).bili)</script></body> </html> 复杂工厂模式 <!DOCTYPE html> <html><head><meta charset="utf-8"><ti...
<!DOCTYPE html> <html><head><meta charset="utf-8"><title>单例设计模式</title></head><body><h1>单例设计模式</h1><ul><li>只有一个实例对象</li><li>实现方式:全局变量</li><li>主要是为了避免创造多个实例造成资源的浪费</li><li>使用单例模式就可以保证整个应用中有且只有一个实例</li></ul><script type="text/javascript">var instance = nullfunction Tools() {if (instance) {return instance}instance = thisthis.nam...
介绍 本章是关于ECMAScript面向对象实现的第2篇,第1篇我们讨论的是概论和CEMAScript的比较,如果你还没有读第1篇,在进行本章之前,我强烈建议你先读一下第1篇,因为本篇实在太长了(35页)。 英文原文:http://dmitrysoshnikov.com/ecmascript/chapter-7-2-oop-ecmascript-implementation/ 注:由于篇幅太长了,难免出现错误,时刻保持修正中。 在概论里,我们延伸到了ECMAScript,现在,当我们知道它OOP实现时,我们再来准确定义...