定义:前篇初期中,我们的讲过结构型模式主要解决的问题是:
它具有的特性:

因为我们的面向对象设计原则中有关于开闭原则:
背景:首先定义了三个时代的电脑系统开机的方式:
# 第1代的电脑系统
class Computer_1():
# 电脑开机方式
def chick_open(selfs):
print("第2代电脑,需要【人工】点击方式开机,调用的方法是:chick_open")
# 第2代的电脑系统
class Computer_2():
# 电脑开机方式
def sound_open(selfs):
print("第2代电脑,需要【声控】的方式开机,调用的方法是:sound_open")
# 第3代的电脑系统
class Computer_3():
# 电脑开机方式
def face_open(selfs):
print("第3代电脑,需要【人脸】的方式开机,调用的方法是:face_open")
新增了第四代的计算机:
# 第4代的电脑系统
class Computer_4():
# 电脑开机方式
def open(selfs):
print("第4代电脑,统一方式开机,调用的方法是:open")
现在来为了统一,不管新旧的开机都要直接使用open的方式进行开机,定义中间适配器:
class ComputerAdapter:
def __init__(self,obj,fusn_arrty={}):
self.obj = obj
if fusn_arrty:
self.__dict__.update(fusn_arrty)
当我们的为所有的电脑开机的时候,统一调用使用第四代的为标准的时候:那么我的适配器调用可以修改为:
if __name__ == '__main__':
com1 = Computer_1()
com2 = Computer_2()
com3 = Computer_3()
com4 = Computer_4()
# 类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里的
# 动态的把open附加到我们的com4中并且在适配器里进行绑定调用open的时候,其实就是调用,com4.open
ComputerAdapter(com4,{'open':com4.open}).open()
# 动态的把open附加到我们的com1中并且在适配器里进行绑定调用open的时候,其实就是调用,com1.chick_open
ComputerAdapter(com1,{'open':com1.chick_open}).open()
ComputerAdapter(com2, {'open': com2.sound_open}).open()
ComputerAdapter(com3, {'open': com3.face_open}).open()
输出的结果为:
第4代电脑,统一方式开机,调用的方法是:open
第1代电脑,需要【人工】点击方式开机,调用的方法是:chick_open
第2代电脑,需要【声控】的方式开机,调用的方法是:sound_open
第3代电脑,需要【人脸】的方式开机,调用的方法是:face_open
如果我现在又退回去,统一使用第三代的人脸识别的话怎么处理呐:
if __name__ == '__main__':
com1 = Computer_1()
com2 = Computer_2()
com3 = Computer_3()
com4 = Computer_4()
# 类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里的
# 动态的把open附加到我们的com4中并且在适配器里进行绑定调用open的时候,其实就是调用,com4.open
ComputerAdapter(com4,{'face_open':com4.open}).face_open()
# 动态的把open附加到我们的com1中并且在适配器里进行绑定调用open的时候,其实就是调用,com1.chick_open
ComputerAdapter(com1,{'face_open':com1.chick_open}).face_open()
ComputerAdapter(com2, {'face_open': com2.sound_open}).face_open()
ComputerAdapter(com3, {'face_open': com3.face_open}).face_open()
指导我们进行相关接口设计/API设计的时候,要保证相关的代码编写遵循开放/封闭原则等原则,使新代码和旧代码之间能相互兼容处理。
在兼容新旧代码的设计上使用适配器模式,可以避免我们对原有旧代码侵入修改,又能实现新代码和旧代码的兼容。
新旧代码都过适配器的模式可以相互扩展。
使用了适配器模式来获得API一致性和接口兼容性
简书:https://www.jianshu.com/u/d6960089b087
掘金:https://juejin.cn/user/2963939079225608
小钟同学 | 文 【原创】| QQ:308711822
1:本文相关描述主要是个人的认知和见解,如有不当之处,还望各位大佬指正。 2:关于文章内容,有部分内容参考自互联网,如有链接会声明标注;如没有及时标注备注的链接的,如有侵权请联系,我会立即删除处理哟。
原文作者:程序员小钟同学;如有侵权,请联系管理员删除。