C++设计模式之适配器模式(三)
4、适配器模式总结
在对象适配器模式中。适配器与适配者之间是关联关系;在类适配器模式中。适配器与适配者之间是继承关系。不论是对象适配器还是类适配器。适配器模式都将现有接口转化为客户类所期望的接口。实现了对现有类的复用。为了避免两个或者多个事物之间直接耦合。应该怎样分配职责?
大多数情况都能够通过添加一层间接性来解决。将职责分配给中介对象。使其作为其它构件或服务之间的媒介,以避免他们之间的直接耦合。在适配器模式中,为了避免客户类和与适配者类直接耦合,也就是客户类直接訪问适配者类。能够添加一个适配器类,减少客户类与适配者类的耦合性。当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法。而这个过程对客户类是透明的,客户类并不直接訪问适配者类。
它是一种使用频率很高的设计模式,在软件开发中得以广泛应用。
1.主要长处
不管是对象适配器模式还是类适配器模式都具有例如以下长处:
(1) 将目标类和适配者类解耦。通过引入一个适配器类来重用现有的适配者类,无须改动原有结构。
(2) 添加了类的透明性和复用性,将详细的业务实现过程封装在适配者类中。对于client类而言是透明的。并且提高了适配者的复用性,同一个适配者类能够在多个不同的系统中复用。
(3) 灵活性和扩展性都非常好。通过使用配置文件,能够非常方便地更换适配器,也能够在不改动原有代码的基础上添加新的适配器类,全然符合“开闭原则”。
详细来说,类适配器模式还有例如以下长处:
因为适配器类是适配者类的子类,因此能够在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。
对象适配器模式还有例如以下长处:
(1) 一个对象适配器能够把多个不同的适配者适配到同一个目标。
(2) 能够适配一个适配者的子类。因为适配器和适配者之间是关联关系,依据“里氏代换原则”。适配者的子类也可通过该适配器进行适配。
2.主要缺点
类适配器模式的缺点例如以下:
(1) 对于Java、C#等不支持多重类继承的语言。一次最多仅仅能适配一个适配者类。不能同一时候适配多个适配者;
对象适配器模式的缺点例如以下:
与类适配器模式相比,要在适配器中置换适配者类的某些方法比較麻烦。假设一定要置换掉适配者类的一个或多个方法,能够先做一个适配者类的子类。将适配者类的方法置换掉。然后再把适配者类的子类当做真正的适配者进行适配,实现过程较为复杂。
3.适配器模式详细应用
(1)复用已经写好的功能模块,比如:已经写好了一个员工信息模块。要又一次开发一个新的企业管理系统。能够复用员工信息模块。
(2)程序执行时的日志信息,能够记录到数据库,也能够记录到Txt文件里。
如今变更需求。使日志信息能够同一时候记录到数据库和Txt文件里。
能够加入一个适配器类,适配数据库操作和文件操作。
(3)在软件开发过程中。我们会开发出一些功能性模块。如排序算法模块、查找模块、或者封装链表、队列、树等操作。
在须要复用这些功能的时候,直接使用。无需又一次开发这些功能模块。
(4)网上银行加密模块开发: 已经开发好了一套网银加密模块。如今须要又一次开发一个类似的软件,能够直接复用已经开发好的加密模块。
(5)某公司已经开发了一套火车票识别软件。包括二值化、去噪、版面分析、栏目提取等模块。如今要开发银行卡识别项目。则能够直接复用火车票识别中的功能模块。
(6)某公司想要开发一套输入法软件,能够购买搜狗输入法的搜索模块,直接加以复用,无需自己重头开发。
(7)生活中的适配器: 电源适配器。USB转串口线,水管专修工人使用各种接口连接本来没法进行相连的管道。
C++设计模式之适配器模式(三)的更多相关文章
- C#设计模式(7)——适配器模式(Adapter Pattern)
一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...
- C#设计模式之七适配器模式(Adapter)【结构型】
一.引言 从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题, ...
- 8.3 GOF设计模式二: 适配器模式 Adapter
GOF设计模式二: 适配器模式 Adapter 为中国市场生产的电器,到了美国,需要有一个转接器才能使用墙上的插座,这个转接 器的功能.原理?复习单实例模式 SingleTon的三个关键点 ...
- C#设计模式之六适配器模式(Adapter Pattern)【结构型】
一.引言 从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题,那[ ...
- C#设计模式(7)——适配器模式(Adapter Pattern)(转)
一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...
- 怎样让孩子爱上设计模式 —— 7.适配器模式(Adapter Pattern)
怎样让孩子爱上设计模式 -- 7.适配器模式(Adapter Pattern) 标签: 设计模式初涉 概念相关 定义: 适配器模式把一个类的接口变换成client所期待的还有一种接口,从而 使原本因接 ...
- JAVA学习笔记--策略设计模式与适配器模式
一.策略设计模式 创建一个能够根据所传递对象的不同而具有不同行为的方法被称为策略设计模式:这类方法包含所要执行的算法中固定不变的部分,而“策略”包含变化的部分.策略就是传递进去的参数对象,它包含要执行 ...
- C#设计模式(7)——适配器模式
一.概述 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 二.模型 三.代码实现 using System; /// 这里以 ...
- 大型Java进阶专题(八)设计模式之适配器模式、装饰者模式和观察者模式
前言 今天开始我们专题的第八课了.本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式. ...
随机推荐
- [CF340D]Bubble Sort Graph/[JZOJ3485]独立集
题目大意: 给你一个序列,对序列中所有逆序对之间连一条边,问图中最大独立集为多大,有哪些点一定在最大独立集中. 思路: 在纸上画一下发现最大独立集一定是元序列的一个LIS,最大独立集必经点就是所有LI ...
- python 实现简单的KNN算法
from numpy import * import operator def createDataSet(): group = array([[3,104],[2,100],[1,81],[101, ...
- MFC绘制棋盘格
(1)新建立一个MFC空白的基于视类的工程 (2)在View类中重写OnPaint消息 void CMy005View::OnPaint() { CPaintDC dc(this); // devic ...
- Android Studio导入第三方库的三种方法
叨叨在前 今天在项目中使用一个图片选择器的第三方框架——GalleryFinal,想要导入源码,以便于修改,于是上完查找了一下方法,想到之前用到过其他导入第三方库的方法,现在做个小总结,以防忘记. A ...
- 【POI】解析xls报错:java.util.zip.ZipException: error in opening zip file
今天使用POI解析XLS,报错如下: Servlet.service() for servlet [rest] in context with path [/cetBrand] threw excep ...
- 封装log4cp p
log4cpp 是参考 log4j 所写的 c++ 版本的写 log 的库.可以在这里下载 http://log4cpp.sourceforge.net/ 我的使用方法是: 1,定义了一个 _ ...
- 解决marathon上docker实例一直waitting的问题
可能原因: 1. mesos-slave上资源不够,一般是内存不够.可上mesos-master:5050上查看 2. 宿主机上没有镜像,一直在拉或拉不到.上宿主机上查看: docker images ...
- Android4.4系统源码百度网盘下载
众所周知.Android如今非常火,肯定也有非常多android开发人员像我一样想研究android系统的源码.可是假设依照Google官方站点http://source.android.com/so ...
- Foreach控件使用
在SSIS中,Foreach控件可以循环处理选中的文件中的文件,例如sql文件,Excel文件等.下面就介绍一个比较经典的案例,将一个文件夹中包含的多个Excel文件循环导入至数据库中. 第一步:在数 ...
- 通用测试用例大全(转自——知了.Test)
为方便平时写测试用例,整理如下: 功能 条件 测试步骤 测试数据 预期结果 备注 搜索或查询 单独遍历各查询条件,测试按各查询条件是否都能够查询出相应的值. 查询出符合条件的记录 设置 ...