《精通Python设计模式》试读:4.1 现实生活的例子

结构型设计模式处理一个系统中不同实体(比如,类和对象)之间的关系,关注的是提供一种简单的对象组合方式来创造新功能(请参考[GOF95,第155页]和网页[t.cn/RqBdWzD])。 适配器模式(Adapter pattern)是一种结构型设计模式,帮助我们实现两个不兼容接口之间的兼容。首先,解释一下不兼容接口的真正含义。如果我们希望把一个老组件用于一个新系统中,或者把一个新组件用于一个老系统中,不对代码进行任何修改两者就能够通信的情况很少见。但又并非总是能修改代码,或因为我们无法访问这些代码(例如,组件以外部库的方式提供),或因为修改代码本身就不切实际。在这些情况下,我们可以编写一个额外的代码层,该代码层包含让两个接口之间能够通信需要进行的所有修改。这个代码层就叫适配器。 电子商务系统是这方面众所周知的例子。假设我们使用的一个电子商务系统中包含一个calculate_total(order)函数。这个函数计算一个订单的总金额,但货币单位为丹麦克朗 (Danish Kroner,DKK)。顾客让我们支持更多的流行货币,比如美元(United States Dollar,USD)和欧元(Euro,EUR),这是很合理的要求。如果我们拥有系统的源代码,那么可以扩展系统,方法是添加一些新函数,将金额从DKK转换成USD,或者从DKK转换成EUR。但是如果应用仅以外部库的方式提供,我们无法访问其源代码,那又该怎么办呢?在这种情况下,我们仍然可以使用这个外部库(例如,调用它的方法),但无法修改/扩展它。解决方案是编写一个包装器(又名适配器)将数据从给定的DKK格式转换成期望的USD或EUR格式。 适配器模式并不仅仅对数据转换有用。通常来说,如果你想使用一个接口,期望它是function_a(),但仅有function_b()可用,那么可以使用一个适配器把function_b()转换(适配)成function_a()(请参考[Eckel08,第207页]和网页[t.cn/RqBdTCD])。不仅对于函数可以这样做,对于函数参数也可以如此。其中一个例子是,有一个函数要求参数x、y、z,但你手头只有一个带参数x、y的函数。在4.4节我们将看到如何使用适配器模式。 4.1 现实生活的例子 也许我们所有人每天都在使用适配器模式,只不过是硬件上的,而不是软件上的。如果你有一部智能手机或者一台平板电脑,在想把它(比如,iPhone手机的闪电接口)连接到你的电脑时,就需要使用一个USB适配器。如果你从大多数欧洲国家到英国旅行,在为你的笔记本电脑充电时,需要使用一个插头适配器。如果你从欧洲到美国旅行,同样如此;反之亦然。适配器无处不在! 下图展示了硬件适配器的若干例子(请参考网页[t.cn/RqBdTCD]),经sourcemaking.com允许使用。

>精通Python设计模式

精通Python设计模式
作者: [荷] Sakis Kasampalis
isbn: 7115428034
书名: 精通Python设计模式
页数: 144
译者: 夏永锋
定价: 45.00元
出版社: 人民邮电出版社
装帧: 平装
出版年: 2016-7