代码改变世界

深入理解JavaScript系列(37):设计模式之享元模式

2012-04-09 08:46 by 汤姆大叔, 15203 阅读, 20 推荐, 收藏, 编辑
摘要:介绍享元模式(Flyweight),运行共享技术有效地支持大量细粒度的对象,避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类)。享元模式可以避免大量非常相似类的开销,在程序设计中,有时需要生产大量细粒度的类实例来表示数据,如果能发现这些实例除了几个参数以外,开销基本相同的 话,就可以大幅度较少需要实例化的类的数量。如果能把那些参数移动到类实例的外面,在方法调用的时候将他们传递进来,就可以通过共享大幅度第减少单个实例 的数目。那么如果在JavaScript中应用享元模式呢?有两种方式,第一种是应用在数据层上,主要是应用在内存里大量相似的对象上;第二种是应用在DOM层上,享元 阅读全文

深入理解JavaScript系列(36):设计模式之中介者模式

2012-03-13 09:08 by 汤姆大叔, 14019 阅读, 29 推荐, 收藏, 编辑
摘要:介绍中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。主要内容来自:http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#mediatorpatternjavascript正文软件开发中,中介者是一个行为设计模式,通过提供一个统一的接口让系统的不同部分进行通信。一般,如果系统有很多子模块需要直接沟通,都要创建一个中央控制点让其各模块通过该中央控制点进行交互。中介者模式可以让这些子模块不需要直接沟通,而达到进 阅读全文

深入理解JavaScript系列(35):设计模式之迭代器模式

2012-03-09 08:46 by 汤姆大叔, 12320 阅读, 27 推荐, 收藏, 编辑
摘要:介绍迭代器模式(Iterator):提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示。迭代器的几个特点是:访问一个聚合对象的内容而无需暴露它的内部表示。为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作。遍历的同时更改迭代器所在的集合结构可能会导致问题(比如C#的foreach里不允许修改item)。正文一般的迭代,我们至少要有2个方法,hasNext()和Next(),这样才做做到遍历所有对象,我们先给出一个例子:var agg = (function () { var index = 0, data = [1, 2, 3, 4,... 阅读全文

深入理解JavaScript系列(34):设计模式之命令模式

2012-03-08 09:13 by 汤姆大叔, 13304 阅读, 14 推荐, 收藏, 编辑
摘要:介绍命令模式(Command)的定义是:用于将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及执行可撤销的操作。也就是说改模式旨在将函数的调用、请求和操作封装成一个单一的对象,然后对这个对象进行一系列的处理。此外,可以通过调用实现具体函数的对象来解耦命令对象与接收对象。正文我们来通过车辆购买程序来展示这个模式,首先定义车辆购买的具体操作类:$(function () { var CarManager = { // 请求信息 requestInfo: function (model, id) { ... 阅读全文

深入理解JavaScript系列(33):设计模式之策略模式

2012-03-05 09:22 by 汤姆大叔, 18904 阅读, 25 推荐, 收藏, 编辑
摘要:介绍策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。正文在理解策略模式之前,我们先来一个例子,一般情况下,如果我们要做数据合法性验证,很多时候都是按照swith语句来判断,但是这就带来几个问题,首先如果增加需求的话,我们还要再次修改这段代码以增加逻辑,而且在进行单元测试的时候也会越来越复杂,代码如下: validator = { validate: function (value, type) { switch (type) { ca... 阅读全文

深入理解JavaScript系列(32):设计模式之观察者模式

2012-03-02 08:43 by 汤姆大叔, 62718 阅读, 55 推荐, 收藏, 编辑
摘要:介绍观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得它们能够自动更新自己。使用观察者模式的好处:支持简单的广播通信,自动通知所有已经订阅过的对象。页面载入后目标对象很容易与观察者存在一种动态关联,增加了灵活性。目标对象与观察者之间的抽象耦合关系能够单独扩展以及重用。正文(版本一)JS里对观察者模式的实现是通过回调来实现的,我们来先定义一个pubsub对象,其内部包含了3个方法:订阅、退订、发布。var pubsub = {};(function (q) 阅读全文

深入理解JavaScript系列(31):设计模式之代理模式

2012-02-29 09:03 by 汤姆大叔, 20788 阅读, 50 推荐, 收藏, 编辑
摘要:介绍代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下:代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。代理模式使得代理对象控制具体对象的引用。代理几乎可以是任何对象:文件,资源,内存中的对象,或者是一些难以复制的东西。正文我们来举一个简单的例子,假如dudu要送酸奶小妹玫瑰花,却不知道她的联系方式或者不好意思,想委托大叔去送这些玫瑰,那大叔就是个代理(其实挺好的,可以扣几朵给媳妇),那我们如何来做呢?// 先声明美女对象var girl = function (name) { this.name = name;};// 这是duduvar dudu = f... 阅读全文

深入理解JavaScript系列(30):设计模式之外观模式

2012-02-28 08:55 by 汤姆大叔, 13282 阅读, 22 推荐, 收藏, 编辑
摘要:介绍外观模式(Facade)为子系统中的一组接口提供了一个一致的界面,此模块定义了一个高层接口,这个接口值得这一子系统更加容易使用。正文外观模式不仅简化类中的接口,而且对接口与调用者也进行了解耦。外观模式经常被认为开发者必备,它可以将一些复杂操作封装起来,并创建一个简单的接口用于调用。外观模式经常被用于JavaScript类库里,通过它封装一些接口用于兼容多浏览器,外观模式可以让我们间接调用子系统,从而避免因直接访问子系统而产生不必要的错误。外观模式的优势是易于使用,而且本身也比较轻量级。但也有缺点 外观模式被开发者连续使用时会产生一定的性能问题,因为在每次调用时都要检测功能的可用性。下面是一 阅读全文

深入理解JavaScript系列(29):设计模式之装饰者模式

2012-02-24 08:59 by 汤姆大叔, 20319 阅读, 38 推荐, 收藏, 编辑
摘要:介绍装饰者提供比继承更有弹性的替代方案。 装饰者用用于包装同接口的对象,不仅允许你向方法添加行为,而且还可以将方法设置成原始对象调用(例如装饰者的构造函数)。装饰者用于通过重载方法的形式添加新功能,该模式可以在被装饰者前面或者后面加上自己的行为以达到特定的目的。正文那么装饰者模式有什么好处呢?前面说了,装饰者是一种实现继承的替代方案。当脚本运行时,在子类中增加行为会影响原有类所有的实例,而装饰者却不然。取而代之的是它能给不同对象各自添加新行为。如下代码所示://需要装饰的类(函数)function Macbook() { this.cost = function () { ... 阅读全文

大叔手记(21):汤姆大叔博客园开博100天总结

2012-02-23 11:40 by 汤姆大叔, 17013 阅读, 239 推荐, 收藏, 编辑
摘要:介绍昨天是注册博客园的第100天,截止到今天大叔发了99篇帖子,加上今天这篇总共100篇,想来也应该来个总结了,本来是昨天写总结的,但由于加班,于是挪到今天了。为何开博博客这种事物在兴起的时候就已经知道了,却一直没有付诸行动,有几个原因:总觉得浪费时间,尤其是sina微博这种形式的,看到那么多的@@@和乱码,实在是头痛。即便开了博客以后,发现也未被能坚持下去,有时间还不如把自己的团队进行再次提升。自私心,写文章不如看文章,看了自己可以学到很多东西,写了是让别人学到很多东西。于是近几年的时间一直花在自身学习和培养项目组团队身上,到了一个程度以后,大叔突然发现,我的知识如果只让自己团队的人学习,那 阅读全文
上一页 1 2 3 4 5 6 7 8 9 10 ··· 16 下一页