JavaScript设计模式笔记 - 工厂模式 桥接模式

发布于 2012-11-06 | 更新于 2020-09-20

1、工厂模式:

1.1、简单工厂:

另外使用一个类(通常是一个单例)来生成实例,示例程序

1.2、工厂模式:

使用子类来决定一个成员变量应该是哪个具体的类的实例,示例程序

1.3、工厂模式的适用场景:

1.3.1、动态实现:

XHR的例子,使用简单工厂,注意在工厂方法中使用到的memoizing技术;

代码纠正:原书中的代码第37行少了一对执行括号。

专用型连接对象:创建两个新的处理器类:

QueuedHandler:在发起新的请求之前先确保所有请求都已经成功处理。 OfflineHandler:在用户处于离线状态时把请求缓存起来。

示例程序

在运行时选择连接对象:示例程序

1.3.2、节省设置开销:

把设置代码放到类的构造函数中并不是一种高效的做法,这是因为即便设置工作已经完成,每次创建新实例的时候这些代码还是会执行,而且这样做会把设置代码分散到不同的类中。工厂方法非常适合于这种场合。它可以再实例化所有需要的对象之前一次性地进行设置。

1.3.3、用许多小型对象组成一个大对象:

RSS阅读器:由ListDisplay, XhrHandler, conf对象组成,包括fetchFeed, parseFeed, showError, stopUpdates, startUpdates方法。这是一个阐明“用许多小型对象组成一个大对象”这个用途的绝佳示例。它使用工厂模式,先创建出所有要用到的对象,然后再生成并返回那个作为容器的FeedReader类型大对象:示例程序

1.4、优点:

弱化对象的耦合,防止代码的重复。在一个方法中进行类的实例化,可以消除重复性的代码。这是在用一个对接口的调用取代具体的实现。这些都有助于创建模块化的代码。使用工厂模式,你可以先创建一个抽象的父类,然后再子类中创建工厂方法,从而把成员对象的实例化推迟到更专门化的子类中进行。

通过使用工厂方法而不是new关键字及具体类,你可以把所有实例化代码集中在一个位置,可以大大简化更换所用的类或在运行期间动态选择所用的类的工作。

1.5、缺点:

如果不需要再运行期间在一系列可互换的类中进行选择,那就不应该使用工厂方法。大多数类最好使用new关键字和构造函数公开初始化,使代码更简单易读,一眼就看到调用的是什么构造函数而不用查看工厂方法。

如果拿不定主意,就不要用工厂模式,因为在代码重构时还有机会使用工厂模式。

2、桥接模式

按照GoF的定义,桥接模式的作用在于“将抽象与其实现隔离开来,以便二者独立变化”。这种模式对于Javascript中常见的事件驱动的编程大有裨益。

桥接模式最常见和实际的应用场合之一是事件监听器回调函数。 example:事件监听器,把事件处理的语句封装到回调函数中,通过接口而不是实现进行编程。

桥接模式的其他例子:

除了在事件回调函数与接口之间进行桥接外 桥接模式也可以用于连接公开的API代码和私用的实现代码 此外,它还可以用来把多个类联结在一起。从类的角度来看,这意味着把接口作为公开的代码编写,而把类的实现作为私用代码编写。

example:用桥接模式收集某些私用性的信息

example:用桥接模式联结多个类 使用桥接模式,让Class1和Class2能够独立于BridgeClass而发生改变。

构建一个Ajax请求队列,把请求存储在浏览器内存中的一个队列 化数组中,刷新队列时,每个请求都会按“先入先出”的顺序被发送给一个后端的Web服务。

该Ajax请求队列的框架实现:example

该Ajax请求队列的使用例子:example

添加桥接方法的例子:example

这个应用程序到处都有桥接元素的身影,最明显的是,事件监听器回调函数并不直接与队列打交道,而是使用了桥接函数。

在供用户执行刷新和暂停操作的部分,我们提供了一个动作调度函数,其作用就是桥接用户操作所包含的输入信息并将其委托给恰当的处理代码。在DOM脚本编程中,这种技术也称为事件委托。click事件所代表的用户操作与DED.Queue实现完全分开的结果就是,后者的方法并不直接与那些事件耦合在一起,因此你可以在任何地方执行这些方法。

2.1、适用场合:

这里的要诀是要让接口“可桥接”,实际上也就是可适配。

2.2、优点:

把抽象与实现隔离开,有助于独立地管理软件的各组成部分。

2.3、缺点:

每使用一个桥接元素都要增加一次函数调用,这对应用程序的性能会有一些负面影响。提高了系统的复杂程度。如果一个桥接函数被用于连接两个函数,而其中某个函数根本不会在桥接函数之外被调用,那么此时这个桥接函数就不是非要不可的。

桥接模式“将抽象与实现隔离开来,以便二者独立变化”。它可以促进代码的模块化、促成更简洁的实现并提高抽象的灵活性。它可以用来把一组类和函数连接起来,而且提供了一种借助于特权函数访问私用数据的手段。

本文作者: arthinking

本文链接: https://www.itzhai.comjavascript-design-patterns-notes-factory-mode.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。