适配器模式让你可以兼容现有代码,外观模式则是为了封装代码而设计。
这是设计模式系列文章的一部分,点击查看该系列的其他文章。
适配器模式
适配器模式,顾名思义就好像是电脑的转接头一样,目的就是让不同的系统之间可以协同工作。
比如现在已经存在一些代码了,但你不想对它做任何更改,因为这意味着你要修改大量的内容,这时候你可以写一个适配器,将输入转化成现有代码可以直接使用的,这就叫适配器。
举个例子,假设我们有一个奇怪的日期格式,它的年和月中间有一个14,现在有一个代码的逻辑是得到初始日期和结束日期中间的天数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import datetime
class DaysCalculator: def __init__(self, start, end): self.start = start self.end = end
def get_days(self): start = datetime.datetime.strptime(self.start, '%Y14%m') end = datetime.datetime.strptime(self.end, '%Y14%m') return (end - start).days
DaysCalculator(start='20211403', end='20211409').get_days()
|
现在你有一些方法需要依赖这段代码,你不得不也按照这个奇怪的格式工作,那么这时候你可以写一个适配器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class DaysAdaptor: def __init__(self, start, end): start = datetime.datetime.strftime(start, '%Y14%m') end = datetime.datetime.strftime(end, '%Y14%m') self.calculator = DaysCalculator(start, end)
def get_days(self): return self.calculator.get_days()
start = datetime.datetime.strptime('2021/3', '%Y/%m') end = datetime.datetime.strptime('2021/9', '%Y/%m')
DaysAdaptor(start, end).get_days()
|
外观模式
外观模式更关注外部的体验,为了用户体验的方便,它将复杂的内部代码封装起来,只暴露一个简单的方法接受参数供用户调用,从而实现不同的功能。
一个例子是,你想编写一个接受/发送邮件的客户端,对于用户而言,它只需关心:
所以我们可以编写一个简单的方法,只关心这几个参数,而其余的对于地址的处理、检查,对于用户密码的验证等等则隐藏在函数内部。
相信你已经在自己的代码中使用过外观模式,此处不在举例。