C++设计模式之适配器模式
目录
1.设计目的
软件开发中,经常会遇到模块接口不同兼容的情况,如,提供者参数类型时xml格式,而调用者的使用数据类型时JSON,此时就需要使用方法将这两个接口适配下。
而在适配的过程中,还不要影响到业务的代码结构,也让这个适配过程具有一定的扩展性,方便扩展其他的数据类型或者属性结构。
所以引入适配器模式,添加适配对象。
2.UML设计
以经典的“方钉与圆孔”为例子,方钉向插入圆孔必须从根本上半径做适配,所以如图:
3. 代码实现
代码实现:https://github.com/luozichao324/Design-Patterns/tree/main/Adapter/Adapter_SquarePegRoundHole
4. 总结
4.1 应用场景
a) 当你希望使用某个类, 但是其接口与其他代码不兼容时, 可以使用适配器类。 适配器模式允许你创建一个中间层类, 其可作为代码与遗留类、 第三方类或提供怪异接口的类之间的转换器。
b) 如果你需要复用这样一些类, 他们处于同一个继承体系, 并且他们又有了额外的一些共同的方法, 但是这些共同的方法不是所有在这一继承体系中的子类所具有的共性。
此时你可以把这些共同的方法扩展到需要的子类中,但这样你必须在所有新子类中重复添加这些代码。
那么此时引入适配器对象,将缺失功能添加到一个适配器对象中,然后你可以将缺少功能的对象封装在适配器中, 从而动态地获取所需功能。此适配器对象也是继承于同一个继承体系。
4.2 优点与缺点
a) 单一职责原则,你可以将接口或数据转换代码从程序主要业务逻辑中分离。
b) 开闭原则,只要客户端代码通过客户端接口与适配器进行交互, 你就能在不修改现有客户端代码的情况下在程序中添加新类型的适配器。
c) 代码整体复杂度增加, 因为你需要新增一系列接口和类。