4、适配器模式总结

在对象适配器模式中。适配器与适配者之间是关联关系;在类适配器模式中。适配器与适配者之间是继承关系。不论是对象适配器还是类适配器。适配器模式都将现有接口转化为客户类所期望的接口。实现了对现有类的复用。为了避免两个或者多个事物之间直接耦合。应该怎样分配职责?

大多数情况都能够通过添加一层间接性来解决。将职责分配给中介对象。使其作为其它构件或服务之间的媒介,以避免他们之间的直接耦合。在适配器模式中,为了避免客户类和与适配者类直接耦合,也就是客户类直接訪问适配者类。能够添加一个适配器类,减少客户类与适配者类的耦合性。当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法。而这个过程对客户类是透明的,客户类并不直接訪问适配者类。

它是一种使用频率很高的设计模式,在软件开发中得以广泛应用。

1.主要长处

不管是对象适配器模式还是类适配器模式都具有例如以下长处:

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

(2) 添加了类的透明性和复用性,将详细的业务实现过程封装在适配者类中。对于client类而言是透明的。并且提高了适配者的复用性,同一个适配者类能够在多个不同的系统中复用。

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

详细来说,类适配器模式还有例如以下长处:

因为适配器类是适配者类的子类,因此能够在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。

对象适配器模式还有例如以下长处:

(1) 一个对象适配器能够把多个不同的适配者适配到同一个目标。

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

2.主要缺点

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

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

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

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

3.适配器模式详细应用

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

(2)程序执行时的日志信息,能够记录到数据库,也能够记录到Txt文件里。

如今变更需求。使日志信息能够同一时候记录到数据库和Txt文件里。

能够加入一个适配器类,适配数据库操作和文件操作。

(3)在软件开发过程中。我们会开发出一些功能性模块。如排序算法模块、查找模块、或者封装链表、队列、树等操作。

在须要复用这些功能的时候,直接使用。无需又一次开发这些功能模块。

(4)网上银行加密模块开发: 已经开发好了一套网银加密模块。如今须要又一次开发一个类似的软件,能够直接复用已经开发好的加密模块。

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

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

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

C++设计模式之适配器模式(三)的更多相关文章

  1. C#设计模式(7)——适配器模式(Adapter Pattern)

    一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...

  2. C#设计模式之七适配器模式(Adapter)【结构型】

    一.引言   从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题, ...

  3. 8.3 GOF设计模式二: 适配器模式 Adapter

    GOF设计模式二: 适配器模式 Adapter  为中国市场生产的电器,到了美国,需要有一个转接器才能使用墙上的插座,这个转接 器的功能.原理?复习单实例模式  SingleTon的三个关键点  ...

  4. C#设计模式之六适配器模式(Adapter Pattern)【结构型】

    一.引言 从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题,那[ ...

  5. C#设计模式(7)——适配器模式(Adapter Pattern)(转)

    一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...

  6. 怎样让孩子爱上设计模式 —— 7.适配器模式(Adapter Pattern)

    怎样让孩子爱上设计模式 -- 7.适配器模式(Adapter Pattern) 标签: 设计模式初涉 概念相关 定义: 适配器模式把一个类的接口变换成client所期待的还有一种接口,从而 使原本因接 ...

  7. JAVA学习笔记--策略设计模式与适配器模式

    一.策略设计模式 创建一个能够根据所传递对象的不同而具有不同行为的方法被称为策略设计模式:这类方法包含所要执行的算法中固定不变的部分,而“策略”包含变化的部分.策略就是传递进去的参数对象,它包含要执行 ...

  8. C#设计模式(7)——适配器模式

    一.概述 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 二.模型 三.代码实现 using System; /// 这里以 ...

  9. 大型Java进阶专题(八)设计模式之适配器模式、装饰者模式和观察者模式

    前言 ​ 今天开始我们专题的第八课了.本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式. ...

随机推荐

  1. Problem D: 指针:调用自定义排序函数sort,对输入的n个数进行从小到大输出。

    #include<stdio.h> int sort(int *p,int n) { int i,j,temp; ;i<n-;i++) for(j=i;j<n;j++) if( ...

  2. es进行聚合操作时提示Fielddata is disabled on text fields by default

    在进行派粗前,先执行以下操作 { "properties": { "updatedate": { "type": "text&qu ...

  3. 8VC Venture Cup 2016 - Final Round (Div. 2 Edition) A. Orchestra 水题

    A. Orchestra 题目连接: http://www.codeforces.com/contest/635/problem/A Description Paul is at the orches ...

  4. iOS framework静态库中使用xib和图片资源详解

    一.新建bundle 前2篇文章介绍了iOS 最新framework和.a静态库制作及使用全解   iOS 工程套子工程,主工程和framework工程或.a library静态库工程联调 我现在是在 ...

  5. (转)C++ STL中的vector的内存分配与释放

    C++ STL中的vector的内存分配与释放http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html 1.vector的内 ...

  6. [Android实例] Android 6.0RecyclerView SwipeRefreshLayout 下拉刷新 上拉加载

    这是Android 6.0的 SwipeRefreshLayout 实现下拉刷新和RecyclerView的上拉加载更多,以及添加分割线等 Android <ignore_js_op> r ...

  7. MySql_安装及简单命令

    一.下载MySql http://dev.mysql.com/downloads/file/?id=461390 版本位5.7.11.0.msi,32位的,但是该版本在64位机器上也可以使用 二.安装 ...

  8. Android内存优化11 内存泄漏常见情况2 内部类泄漏

    线程持久化 Java中的Thread有一个特点就是她们都是直接被GC Root所引用,也就是说Dalvik虚拟机对所有被激活状态的线程都是持有强引用,导致GC永远都无法回收掉这些线程对象,除非线程被手 ...

  9. css实现半颗星评分效果

    效果如下: html代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  10. MySQL5.6安装步骤(windows7/8_64位)

    [转]MySQL5.6安装步骤(windows7/8_64位) 1. 下载MySQL Community Server 5.6.11 2. 解压MySQL压缩包 将以下载的MySQL压缩包解压到自定义 ...