设计模式之装饰者模式(Decorator)

介绍

装饰者提供比继承更有弹性的替代方案。 装饰者用用于包装同接口的对象,不仅允许你向方法添加行为,而且还可以将方法设置成原始对象调用(例如装饰者的构造函数)。

装饰者用于通过重载方法的形式添加新功能,该模式可以在被装饰者前面或者后面加上自己的行为以达到特定的目的。

定义

给对象动态地增加职责的方式称为装饰者(decorator)模式。

装饰者模式能够在不改变对象自身的基础上,在程序运行期间给对象动态地添加职责。跟继承相比,装饰者是一种更轻便灵活的做法,这是一种“即用即付”的方式。

知识≠技术≠财富

很多人感慨,不是上大学被大学上了。昏昏然步入社会,成为奔波劳碌的拼命蜗居一族。在如今信息爆炸的时代,我觉得拼的其实是你知识到财富的转化率。 思

设计模式之中介者模式(Mediator)

介绍 中介者模式的作用就是解除对象与对象之间的紧耦合关系。增加一个中介者对象后,所有的相关对象都通过中介者对象来通信,而不是互相引用,所以当一

call()、apply()、bind()的用法

在javascript中,函数不仅是一种语法,也是值,也就是说,可以将函数赋值给变量,存储在对象的属性或数组的元素中, 作为参数传入另外一个函

设计模式之模板模式(TemplateMethod)

在 JavaScript 开发中用到继承的场景其实并不是很多,很多时候我们都喜欢用 mix-in 的方式给对象扩展属性。但这不代表继承在 JavaScript 里没有用武之地,虽然没有真正的类和继承

设计模式之策略模式(Strategy)

在程序设计中,我们也常常遇到这样的情况,要实现某一个功能有多种方案可以选择。比如一个压缩文件的程序,既可以选择 zip 算法,也可以选择 gzip 算法。 这些算法灵活多样,而且可以随意互相替换。这种解决方案就是将要介绍的策略模式。

定义

策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。

从定义上看,策略模式就是用来封装算法的。但如果把策略模式仅仅用来封装算法,未免有一点大材小用。在实际开发中,我们通常会把算法的含义扩散开来,使策略模式也可以用来封装一系列的“业务规则”。只要这些业务规则指向的目标一致,并且可以被替换使用,我们就可以用策略模式来封装它们。

设计模式之迭代器模式(Iterator)

迭代器模式是一种相对简单的模式,简单到很多时候我们都不认为它是一种设计模式。目前的绝大部分语言都内置了迭代器。

比如:JavaScript 的 Array.prototype.forEach

jQuery里一个非常有名的迭代器就是 $.each 方法,通过each我们可以传入额外的function,然后来对所有的item项进行迭代操作,例如:

1
2
3
4
5
6
7
$.each( [1, 2, 3], function( i, n ){
	console.log( '当前下标为: '+ i,'当前值为:' + n );
});

// 下标: 0 当前值:1
// 下标: 1 当前值:2
// 下标: 2 当前值:3

设计模式之代理模式(Proxy)

代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。

代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对象。替身对象对请求做出一些处理之后,再把请求转交给本体对象。

定义

代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下:

代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

设计模式之单例模式(Singleton)

在 JavaScript 开发中,单例模式的用途非常广泛。比如,当我们单击登录按钮的时候,页面中会出现一个登录浮窗,而这个登录浮窗是唯一的,无论单击多少次登录按钮

Kindle 书籍源下载推荐

近日重拾公司所发kindle,之前一度觉得手机阅读完全可以替代这个产品,但手机看pdf文件,还是不够舒适,虽然是无背光版的,但在上下班路上的

typeof与instanceof的区别

typeof和instanceof都可以用来判断变量,它们的用法有很大区别: typeof:返回一个变量的基本类型,检测的是基本数据类型 ins