代码改变世界

Pro javascript design pattern 读书笔记之 A singleton with private members 之 branching

2008-10-27 11:01  wlstyle  阅读(197)  评论(0)    收藏  举报

Branching(分支)

Braching是一种技术他可以允许你把浏览器的不同封装在动态的方法中然后在运行的时候选择。作为一个例子,让我们创建一个方法返回一个xmlhttprequest对象。这个XHR对象是一个大多数浏览器xmlhttprequest类的实例和一个对于老的版本的ie activex 类的实例.像这中方法通常包含一些浏览器的探测。如果branching没有使用,每一次当方法被调用。所有的浏览器嗅探将重新执行一次。这样会非常没有效率当这个方法经常被调用的时候。

一个有效的方式是当脚本加载的时候,分配浏览器的不同一次。载这中方式中,当实例化完成后。每一个浏览器只执行他所特有的执行javascrtpt的代码。在运行的时候动态的分配给一个函数分配代码是javascript是如此的灵活和有趣的一个原因。这中方式的优化很容易理解这样也使每一个函数的调用更有效。

可能不是一下子就明白branching和单一设计模式使如何关联的,在上面提到的三种模式中,所有的代码都是在运行的时候分配给单一对象的。这个在使用闭包创建私有成员最明显。

MyNamespace.Singleton=(function(){})();

在执行的时候,匿名函数被执行。返回了一个对象这个对象被分配给MyNamespace.Singleton变量,这样很容易创建两个不同的对象根据一定 的情况把他们分配变量。

 

the branching structor

 

在这里有两个对象被创建,有相同的扩展方法。对于使用该单一对象的开发者。无论把那个分配给变量都无关紧要。因为他们实现相同的接口完成相同的任务。只有特殊的代码改变了。这种方式不限制只有两个branchs。如果有理由这样去做,你能很简单的创建有三四个分支的单一对象。条件用来确定当执行的时候选择那一个对象执行。这个条件通常是一些性质的检测。确保javascript环境能实现代码.如果不存在这种环境。那么就以最可靠的方式实现。

Branching不总是更有效率。在上面的例子中,两个对象在内存中被创建。虽然只有一个要被使用。当决定是否使用这中技术的时候。你必须权衡他的减少判断的事件好处和内存的高使用率。下一个例子展示了一种情况,当分支在这时候应该被使用。因为分支对象很小而决定使用那条分支的对象很大。