适配器模式是一种结构型设计模式,它能够使接口不兼容的对象能够相互合作。适配器可以充当两个对象之间的封装器,接收一个对象的调用并将其转换为另一个对象可识别的格式和接口。在PHP代码中,适配器模式很常见,特别是在遗留代码的系统中。适配器让遗留代码与现代的类得以相互合作。
适配器模式的应用场景包括:当希望使用某个类,但其接口与其他代码不兼容时,可以使用适配器类;如果需要复用一些类,它们处于同一个继承体系,又有了额外的一些共同的方法,但这些共同的方法不是所有在这一继承体系中的子类所具有的共性。
适配器模式的优点包括单一职责原则和开闭原则的实现。通过将接口或数据转换代码从程序主要业务逻辑中分离,可以让程序更好地遵循单一职责原则。另外,只要客户端代码通过客户端接口与适配器进行交互,就能在不修改现有客户端代码的情况下在程序中添加新类型的适配器,实现了开闭原则。
然而,适配器模式的缺点在于代码整体复杂度增加,因为需要新增一系列接口和类。
适配器模式的核心结构包括适配器类(Adapter),它用于适配、扩展功能或接口。
举例说明应用场景1:当希望使用某个类,但其接口与其他代码不兼容时,可以使用适配器类。例如,一台电脑显示器本身是VGA的数据线,但现在只有HDMI的数据线,这个时候只有有个适配器(转接头)就可以使用。
(1)LcdInterface类本身相当于电脑显示屏,vga()方法相当于电脑显示屏自带的vga格式的接口。
(2)适配器(转接头)。
(3)新的数据线类,支持HDMI接口。
(4)调用方式。
(5)结果展示
举例说明应用场景2:如果需要复用一些类,它们处于同一个继承体系,并且又有了额外的一些共同的方法,但这些共同的方法不是所有都在这一继承体系中的子类所具有的共性。例如,有一个相同类型的类文件,里面有你要用的方法,但又不全面。这个时候就可以使用适配器继承老的接口类,再去实现没有的方法后去使用。
(1)公共的计算器接口类。
(2)公共接口类的具体实现。
(3)继承公共接口类后扩展了其他方法的接口类。
(4)适配器适配所有方法。
(5)适配器调用方式。
(6)结果展示