首页 > 代码库 > C++设计模式之适配器模式(三)

C++设计模式之适配器模式(三)

4、适配器模式总结

    在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承关系。不论是对象适配器还是类适配器,适配器模式都将现有接口转化为客户类所期望的接口,实现了对现有类的复用。为了避免两个或者多个事物之间直接耦合,应该如何分配职责? 大多数情况都可以通过增加一层间接性来解决,将职责分配给中介对象,使其作为其他构件或服务之间的媒介,以避免他们之间的直接耦合。在适配器模式中,为了避免客户类和与适配者类直接耦合,也就是客户类直接访问适配者类,可以增加一个适配器类,降低客户类与适配者类的耦合性。当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对客户类是透明的,客户类并不直接访问适配者类。它是一种使用频率非常高的设计模式,在软件开发中得以广泛应用。

1.主要优点

    无论是对象适配器模式还是类适配器模式都具有如下优点:

    (1) 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。

    (2) 增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用。

    (3) 灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。

    具体来说,类适配器模式还有如下优点:

    由于适配器类是适配者类的子类,因此可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。

    对象适配器模式还有如下优点:

    (1) 一个对象适配器可以把多个不同的适配者适配到同一个目标

    (2) 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据“里氏代换原则”,适配者的子类也可通过该适配器进行适配。

2.主要缺点

    类适配器模式的缺点如下:

    (1) 对于Java、C#等不支持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者;

    对象适配器模式的缺点如下:

    与类适配器模式相比,要在适配器中置换适配者类的某些方法比较麻烦。如果一定要置换掉适配者类的一个或多个方法,可以先做一个适配者类的子类,将适配者类的方法置换掉,然后再把适配者类的子类当做真正的适配者进行适配,实现过程较为复杂。

3.适配器模式具体应用

    (1)复用已经写好的功能模块,例如:已经写好了一个员工信息模块,要重新开发一个新的企业管理系统,可以复用员工信息模块。

    (2)程序运行时的日志信息,可以记录到数据库,也可以记录到Txt文件中。现在变更需求,使日志信息能够同时记录到数据库和Txt文件中。可以添加一个适配器类,适配数据库操作和文件操作。

    (3)在软件开发过程中,我们会开发出一些功能性模块。如排序算法模块、查找模块、或者封装链表、队列、树等操作。在需要复用这些功能的时候,直接使用,无需重新开发这些功能模块。

    (4)网上银行加密模块开发: 已经开发好了一套网银加密模块,现在需要重新开发一个类似的软件,可以直接复用已经开发好的加密模块。

    (5)某公司已经开发了一套火车票识别软件,包含二值化、去噪、版面分析、栏目提取等模块。现在要开发银行卡识别项目,则可以直接复用火车票识别中的功能模块。

    (6)某公司想要开发一套输入法软件,可以购买搜狗输入法的搜索模块,直接加以复用,无需自己重头开发。

    (7)生活中的适配器: 电源适配器,USB转串口线,水管专修工人使用各种接口连接本来没法进行相连的管道。

C++设计模式之适配器模式(三)