适配器模式Adapter Pattern属于结构型设计模式其核心目的是解决接口不兼容问题通过创建一个适配器类或对象来“转换”一个类的接口使其符合客户端所期望的另一个接口从而让原本因接口不匹配而无法协同工作的类能够一起工作。它不负责对象的创建过程如工厂、单例、建造者等创建型模式那样而是关注类与对象之间的组合与关系因此归类为结构型模式。# 示例类适配器Python中更常用对象适配器但类适配器体现继承思想classTarget:defrequest(self):returnTarget: default behaviorclassAdaptee:defspecific_request(self):returnAdaptee: specific behaviorclassAdapter(Target):def__init__(self):self.adapteeAdaptee()defrequest(self):# 适配将Adaptee的接口转为Target的接口returnfAdapter:{self.adaptee.specific_request()}# 使用adapterAdapter()print(adapter.request())# 输出Adapter: Adaptee: specific behavior适配器模式与装饰器模式虽然在UML类图中都常表现为“包装”结构即一个类持有另一个类的引用但它们在设计意图、使用场景和结构语义上有本质区别✅核心区别总结维度适配器模式Adapter装饰器模式Decorator意图解决接口不兼容问题让不匹配的接口能协同工作转换接口动态扩展对象功能在不修改原类的前提下为对象添加新职责增强行为是否改变接口✅ 是——对外提供目标接口内部调用被适配者不同命名/签名的方法❌ 否——严格保持原有接口一致仅在方法内部增强逻辑客户端感知客户端只认识目标接口Target完全 unaware 被适配者Adaptee客户端通过统一接口Component操作可叠加多层装饰透明可组合目的导向兼容性Compatibility可扩展性Extensibility典型场景集成遗留系统、第三方SDK接口变更、多协议转换如JSON ↔ XML适配日志、缓存、权限校验、压缩/加密等横切关注点的动态附加结构对比以对象方式为例适配器Adapter实现Target接口内部持有Adaptee实例并在request()中调用adaptee.specific_request()并做必要转换如参数重排、返回值封装。装饰器ConcreteDecorator继承/实现Component接口内部持有Component引用可以是原始对象或另一装饰器在operation()中通常先调用component.operation()再前后添加新逻辑。 关键识别口诀适配器是“翻译官”说不同语言但达成沟通装饰器是“化妆师”穿同一件衣服但一层层加特效。