Python设计模式(二)
适配器模式
在Python里,有时会写出令人惊叹的代码。例如,为日期类添加一个 split 方法,该方法接收一个参数(可忽略),并返回年、月、日的元组。这与 AgeCalculator 能完美配合,因为 AgeCalculator 代码会调用一个特殊格式字符串的 strip 方法,且该方法返回年、月、日的元组。 AgeCalculator 只关心 strip 方法是否存在以及是否返回可接受的值,而不关心传入的是否真的是字符串。示例代码如下:
bd = AgeableDate(1975, 6, 14)
today = AgeableDate.today()
print(today)
a = AgeCalculator(bd)
print(a.calculate_age(today))
不过,这种适配器在特定情况下难以维护,因为我们可能很快就会忘记为何要给日期类添加 strip 方法,该方法名也比较模糊。适配器有时就是如此,但如果我们显式创建适配器而非使用继承,其目的会更明显。
除了继承,还可以使用猴子补丁(monkey-patching)为现有类添加方法。但这对 datetime 对象不起作用,因为它不允许在运行时添加属性。不过在普通类中,我们可以添加一个新方法来提供调用代码所需的适配接口。另外,也可以使用函数作为适配器
Python四大设计模式解析
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



