Python设计模式-适配器模式

目录

  • 适配器模式(Adapter Pattern)
  • 适配器模式何时用
  • 适配器模式好处
  • 适配器模式的代码实现
    • 业务需求
    • 设计思路
    • 代码实现
  • 结语

适配器模式(Adapter Pattern)

将一个接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的对象可以一起工作。

适配器模式何时用

希望使用已有对象功能,但接口不匹配时使用。

适配器模式好处

  1. 引入一个适配器类来重用现有的功能,无需修改原有结构。
  2. 灵活性和扩展性都非常好,通过使用配置文件,可以很方便的更换适配器,也可以在不修改原有代码的基础上 增加新的适配器,完全复合开闭原则。

适配器模式的代码实现

业务需求

从国内带一台笔记本电脑到国外出差。笔记本插头是三相的,而国外只有两相插座。需要设计一个适配器来解决插头与插座不匹配的问题。

设计思路

  1. 定义三相插头类TripleCablePlug,它有一个三向插座的请求接口(socket_3_hole_request);
  2. 定义两相插头类TripleCablePlugAdaptee,它有一个两向插座的请求接口(socket_2_hole_request);
  3. 客户向不同的工厂订车后,工厂就会返回相应原料组成的成品车辆。

代码实现

为了实现上述需求,代码如下:

# -*- coding: utf-8 -*-

class DoubleCablePlug: # 两相插头 当地的标准插头

    def socket_2_hole_request(self): # 标准接口
        print('This is a double cable plug...')

class TripleCablePlugAdaptee: # 三相插头 在当地属于特殊插头,需要被适配

    def socket_3_hole_request(self): # 特殊接口
        print('This is a triple cable plug...')

class Adapter(DoubleCablePlug): # 定义适配器,继承自标准插头(个人认为这里不是必须的)

    def __init__(self):
        self.TripleCablePlugAdaptee = TripleCablePlugAdaptee() # 把特殊对象包含在适配器中(关键)

    def socket_2_hole_request(self): # 提供标准接口(关键)
        return self.TripleCablePlugAdaptee.socket_3_hole_request() # 在标准接口下返回实际有用的对象(关键)

if __name__ == '__main__':

    cablePlug = Adapter() # 实例化适配器
    cablePlug.socket_2_hole_request() # 调用标准接口,但返回的是特殊方法执行的结果

结语

适配器模式的关键在于适配器要注意以下三点:

  1. 包含需要被适配的对象(如本例中的三相插头);
  2. 提供标准的调用接口(如本例中的socket_2_hole_request)
  3. 在标准接口中,调用被适配对象的相应方法,并返回其结果。

你可能感兴趣的:(python设计模式,python,设计模式,适配器模式)