python 适配器模式

说起适配器, 一般想起的就是电源适配器, 作用也就是给手机充电, 这里的适配, 在电源适配器一词中,
指的就是适配不同的电压了.

在适配器模式中, 起到的作用也是如此.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class OldAPI:
"""旧版 API 只有一个 show"""
def show(self):
print('show connector')
print('show available APIs')
print('show mannuals')


class NewAPI:
"""新版 API 有三个不同的 show"""
def show_connector(self):
print('show connector')

def show_apis(self):
print('show available APIs')

def show_mannual(self):
print('show mannuals')


class User:
"""用户只能调用旧版的 show 方法"""
def __init__(self, api):
self.api = api

def do(self):
self.api.show()


class Adapter:

def __init__(self, api):
"""接收一个 NewAPI 对象"""
self.api = api

def show(self):
"""适配方法, 做到兼容旧接口"""
self.api.show_connector()
self.api.show_apis()
self.api.show_mannual()

测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> a1 = OldAPI()
>>> a2 = NewAPI()
>>> u1 = User(a1)
>>> u1.do()
show connector
show available APIs
show mannuals
>>> u2 = User(a2)
>>> u2.do()
AttributeError: 'NewAPI' object has no attribute 'show'
>>> adapter = Adapter(a2)
>>> u3 = User(adapter)
>>> u3.do()
show connector
show available APIs
show mannuals
>>>

可以看到 NewAPI 经过 Adapter 的包装之后兼容了旧的用户接口.