一、說明
適配器模式是一種結構型模式,它使接口不兼容的對象能夠相互合作
(一) 解決問題
主要解決接口不兼容問題
(二) 使用場景
- 當系統需要使用現有的類,但類的接口不符合需求時
- 當需要一個統一的輸出接口,但輸入類型不可預知時
- 當需要創建一個可以復用的類,使得該類可以與其他不相關的類或不可預見的類協同工作時
二、結構
- 客戶端(Client)是包含當前程序業務邏輯的類。
- 客戶端接口(Client Interface)描述了其他類與客戶端代碼合作時必須遵循的協議。
- 服務(Service)中有一些功能類(通常來自第三方或遺留系統)。客戶端與其接口不兼容,因此無法直接調用其功能。
- 適配器(Adapter)是一個可以同時與客戶端和服務交互的類:它在實現客戶端接口的同時封裝了服務對象。適配器接受客戶端通過適配器接口發起的調用,并將其轉換為適用于被封裝服務對象的調用。
- 客戶端代碼只需通過接口與適配器交互即可,無需與具體的適配器類耦合。因此,你可以向程序中添加新類型的適配器而無需修改已有代碼。這在服務類的接口被更改或替換時很有用:你無需修改客戶端代碼就可以創建新的適配器類。
三、偽代碼
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__doc__ = """
適配器模式例:不同國家的電源插頭不同,可通過適配器使用不同國家的插頭進行供電
"""class ChinaPlug:"""定義中國的插頭"""@staticmethoddef power_supply():return "中國的兩腳插頭供電中..."class USPlug:"""定義美國的插頭"""@staticmethoddef power_supply():return "美國的兩腳插頭供電中..."class Adapter:"""定義適配器,支持使用多類插頭"""def __init__(self, plug):self.plug = plugdef power_supply(self):return f"適配器使用{self.plug.__class__.__name__}供電中..."# 客戶端代碼
if __name__ == "__main__":"""美國的兩腳插頭供電中...中國的兩腳插頭供電中...------------------------------適配器使用ChinaPlug供電中...適配器使用USPlug供電中..."""us_plug = USPlug()china_plug = ChinaPlug()print(us_plug.power_supply())print(china_plug.power_supply())print("-" * 30)adapters = [Adapter(china_plug), Adapter(us_plug)]for adapter in adapters:print(adapter.power_supply())
四、優缺點
優點
- 兼容性:可以讓原本不兼容的接口協同工作,提高系統的兼容性
- 復用性:可以復用現有的類,無需修改原有代碼,符合開閉原則
缺點
- 增加了系統的復雜性:需要新增一系列接口和類。 有時直接更改服務類使其與其他代碼兼容會更簡單。
?跳轉主頁:【Python筆記】設計模式-CSDN博客