23、Python设计模式(二)

Python四大设计模式解析

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 对象不起作用,因为它不允许在运行时添加属性。不过在普通类中,我们可以添加一个新方法来提供调用代码所需的适配接口。另外,也可以使用函数作为适配器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值