模拟适配模式代码
class SocketEntity:"""接口类型定义"""def __init__(self, num_of_pin, type_of_pin):# 引脚数self.__num_of_pin = num_of_pin# 引脚类型self.__type_of_pin = type_of_pindef get_num_of_pin(self):return self.__num_of_pindef set_num_of_pin(self, num_of_pin):self.__num_of_pin = num_of_pindef get_type_of_pin(self):return self.__type_of_pindef set_type_of_pin(self, type_of_pin):self.__type_of_pin = type_of_pinclass ISocket:"""插座类型"""def get_name(self):"""插座名称"""passdef get_socket(self):"""获取接口"""passclass ChineseSocket(ISocket):"""国标插座"""def get_name(self):return '国标插座'def get_socket(self):return SocketEntity(3, '八字扁型')class BritishSocket(object):"""英标插座"""def name(self):return '英标插座'def socket_inter_face(self):return SocketEntity(3, 'T字方型')class AdapterSocket(ISocket):"""插座转换器"""def __init__(self, britishSocket):self.__britishSocket = britishSocketdef get_name(self):return self.__britishSocket.name() + '转换器'def get_socket(self):socket = self.__britishSocket.socket_inter_face()socket.set_type_of_pin('八字扁型')return socketdef can_charge_for_digtal_device(name, socket):if socket.get_num_of_pin() == 3 and socket.get_type_of_pin() == '八字扁型':is_standard = '符合'can_charge = '可以'else:is_standard = '不符合'can_charge = '不可以'print("[%s]: \n针脚数量:%s, 针脚类型:%s:%s中国标准,%s给中国内地的电子设备充电!" % (name, socket.get_num_of_pin(), socket.get_type_of_pin(), is_standard, can_charge))def test_socket():chinese_socket = ChineseSocket()can_charge_for_digtal_device(chinese_socket.get_name(), chinese_socket.get_socket())british_socket = BritishSocket()can_charge_for_digtal_device(british_socket.name(), british_socket.socket_inter_face())adapter_socket = AdapterSocket(british_socket)can_charge_for_digtal_device(adapter_socket.get_name(), adapter_socket.get_socket())if __name__ == '__main__':test_socket()
什么是适配模式
将一个类的接口变成客户端所期望的另一种接口,从而使原本因接口不匹配而无法一起工作的两类能够在一起工作。
适配模式的作用:
- 接口转换,将原有的接口(或方法)转换成另一种接口。
- 用新的接口包装一个已有的类。
-
适配模式设计思想
适配模式又称变压器模式,也叫包装模式,它的核心思想是:将一个对象经过包装或转换后使它符合指定的接口,使得调用方法可以像使用接口的一般对象一样使用它。
代码框架
```python class Target: “””目标类”””
def function(self):
pass
class Adaptee: “””源对象类”””
def speciafic_function(self):print('被适配对象的特殊方法')
class Adapter(Adaptee, Target): “””适配器”””
def function(self):print('进行功能转换')
```
适配模式的实现有两种方试:一种是组合方式,一种是继承方式。
Targe是一个类的接口,是提供给用户调用的接口对象,如故事剧情种ISocket。Adaptee是要进行适配的对象类,如故事剧情种的BritishSocket的name()和socketInterface()方法包装成ISocket的get_name()和get_socket()接口。
适配模式的两种方式,我比较推荐组合的方式,因为在一些没有interface类型的编程语言中,Adapter类就会多继承,同时继承Target和Adaptee,在程序设计中尽量避免多继承。
适配模式要点
适配模式中主要有三个角色,在设计适配模式时要找到并区分这些角色。
