适配器模式

C++设计模式-Adapter适配器模式

不问归期 提交于 2019-12-30 02:58:42
Adapter适配器模式 作用 :将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 分为类适配器模式和对象适配器模式。 系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。 想使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑用适配器模式。 比如购买的第三方开发组件,该组件接口与我们自己系统的接口不相同,或者由于某种原因无法直接调用该组件,可以考虑适配器。 UML图如下: 图1:类模式适配器 图2:对象模式适配器 代码如下: Adapter.h 1 #ifndef _ADAPTER_H_ 2 #define _ADAPTER_H_ 3 4 //目标接口类,客户需要的接口 5 class Target 6 { 7 public: 8 Target(); 9 virtual ~Target(); 10 virtual void Request();//定义标准接口 11 }; 12 13 //需要适配的类 14 class Adaptee 15 { 16 public: 17 Adaptee(); 18 ~Adaptee(); 19 void

设计模式笔记:适配器模式(Adapter)

感情迁移 提交于 2019-12-30 02:55:59
1. 适配器模式简介 1.1 模式定义   适配器模式:通过一个类的接口转换成客户希望的另外一个接口, 使原本由于接口不兼容而不能一起工作的那些类可以一起工作 。    适配器从结构上分为:类适配器和对象适配器。 其中 类适配器使用继承关系 来对类进行适配, 对象适配器使用对象引用 来进行适配。   C#实现类适配器时,Target只能是接口。实现对象适配器时,Target可以是抽象类也可以是接口。 1.2 使用频率    中高 2. 类适配器模式结构 2.1 结构图 2.1.1 类适配器结构图 2.1.2 对象适配器结构图 2.2 参与者   适配器模式参与者:   ◊ Target:Client所使用的目标接口,可以是接口或抽象类。由于C#不支持多类继承,故把Target定义为接口。   ◊ Adaptee:需要适配的类接口。   ◊ Adapter:适配器,负责Adaptee的接口与Target接口进行适配。   ◊ Client:与符合Target接口的对象协调的类。   在适配器模式中,类Adapter实现适配器的功能,它在Client与Adaptee之间加入Adapter,这样Client把请求发给接口为Target的类Adapter,再由Adapter调用Adaptee,从而实现Client调用Adaptee。 3. 适配器模式结构实现 3.1 类适配器结构实现  

设计模式之Adapter模式

落花浮王杯 提交于 2019-12-30 02:52:20
说起Adapter,STL里的stack和queue都是adapter,底层是deque,隐藏了deque的一些接口,使得其可以达到FIFO是queue,LIFO是stack。 The STL stack is a container adaptor. That is, it is not a "first-class" container, but instead simply "adapts" one of the sequential first-class containers (by default, the deque) for its own purposes. So, the deque interface is restricted (i.e., much of it is hidden) so that the required LIFO (Last In, First Out) stack-like behavior is provided. 再说通透一点,adapter就是适配器,电源适配器知道吧,把220v交流电转换为笔记本可接受的电压和电流就是我们常见的电源适配器,手机电源适配器等等。 还有STL里本来就有一类叫做adapter,有容器adapter即stack和queue,还有迭代器的adapter,有insert iterators,reverse

设计模式的学习(7)适配器模式

我怕爱的太早我们不能终老 提交于 2019-12-28 16:53:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 适配器模式 适配器模式(Adapter Pattern) 将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。 适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。常用作在不修改源代码的情况下让已经存在的类能和其他类一起使用。 根据适配器类和适配者类的关系,适配器模式可以分为以下两种: 对象适配器模式(组合的方式) 类适配器模式(继承的方式) 为什么 试想一下,如果我们不使用适配器模式,我们可以选择修改源码或者更改我们的目标接口。而修改源码或是更改接口很大的代价很大,甚至是我们根本就没有源码。就好像我们无法更换插座接口或是充电器的接头一样。 怎么做 由于适配器模式有多种,下面通过几个代码片段来分别学习一下: 对象适配器模式 类适配器模式 定义目标接口 /** * 目标接口 * */ public interface Target { void request(); } 定义适配者类 /** * 适配者类 * */ public class Adaptee { /** * 客户期望使用的业务方法 */ public void specificRequest() { System.out.println("Adaptee Specific request

通俗易懂设计模式解析——适配器模式

这一生的挚爱 提交于 2019-12-28 07:26:46
前言   前面完成了创建型的设计模式的分享,创建型的设计模式解决的是对象创建的问题。今天开始介绍结构型的设计模式,其中结构型设计模式包括:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。结构型设计模式解决的是类与对象的组合关系。今天讲结构型对象中的第一个——适配器模式。适配器模式——顾名思义嘛。在我们平常的理解中,适配器是干啥用的呢?不就是将两个原本不匹配的东西转换为匹配罢了。适配器是接口转换器,比如电源适配器,USB接口转换器等等。 适配器模式介绍 一、 来由   在系统程序中,我们可能会面临需求的增加或者改变,或者是应用环境的改变。常常需要将一些已经存在的类放在新的需求或者新的环境中应用。但是新的环境要求使用到的接口与现在存在的类或对象不完全匹配。那么如何去面对这样的迁移变化呢? 二、 意图    将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 三、 案例图 四、 适配器模式代码示例   在适配器模式中一般包含以下部分的存在: 客户端: 与目标接口配合协同使用 目标接口: 与客户端协同使用 被适配角色: 表示一个已经存在了并使用的接口 适配器: 整个模式核心存在,将被适配角色转换为目标需要的接口。   接下来我们看下这个示例,前段时间笔记本那个耳机圆孔接口坏掉了

java设计模式--适配器模式

时光毁灭记忆、已成空白 提交于 2019-12-28 07:26:19
定义   将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类一起工作。适配器模式分为类结构模型模式和对象结构型模式两种,前者模式中类直接的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少。 优点   客户端通过适配器可以透明的调用目标接口   复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。   将目标类和适配类解耦,解决了目标类和适配类接口不一致的问题。 缺点   对类适配器来说,更换适配器的过程比较复杂 结构   类适配器模式可以采用多重继承方式实现。java不支持多继承,但可以定义一个适配器类来实现当前系统的业务接口,同时又继承现有组件库中已经存在的组件。   对象适配器模式可以将现有组件库中已经实现的组件引入适配器类中,该类同时实现当前系统的业务接口。   适配器模式包含以下主要角色     目标接口(Target):当前系统业务所期待的接口,它可以是抽象类或接口     适配者类(Adaptee):它是被访问和适配的现存组件库中的组件接口     适配器类(Adapter):它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者 类适配器模式代码 package adapter; //目标接口 interface Target {

IIC设备驱动程序详解

倾然丶 夕夏残阳落幕 提交于 2019-12-25 15:50:43
转自: http://www.cnblogs.com/lfsblack/archive/2012/09/14/2685783.html IIC设备是一种通过IIC总线连接的设备,由于其简单性,被广泛引用于电子系统中。在现代电子系统中,有很多的IIC设备需要进行相互之间通信 IIC总线是由PHILIPS公司开发的两线式串行总线,用于连接微处理器和外部IIC设备。IIC设备产生于20世纪80年代,最初专用与音频和视频设备,现在在各种电子设备中都广泛应用 IIC总线有两条总线线路,一条是串行数据线(SDA),一条是串行时钟线(SCL)。SDA负责数据传输,SCL负责数据传输的时钟同步。IIC设备通过这两条总线连接到处理器的IIC总线控制器上。一种典型的设备连接如图: 与其他总线相比,IIC总线有很多重要的特点。在选择一种设备来完成特定功能时,这些特点是选择IIC设备的重要依据。 主要特点: 1,每一个连接到总线的设备都可以通过唯一的设备地址单独访问 2,串行的8位双向数据传输,位速率在标准模式下可达到100kb/s;快速模式下可以达到400kb/s;告诉模式下可以达到3.4Mb/s 3,总线长度最长7.6m左右 4,片上滤波器可以增加抗干扰能力,保证数据的完成传输 5,连接到一条IIC总线上的设备数量只受到最大电容400pF的限制 6,它是一个多主机系统

适配器模式

左心房为你撑大大i 提交于 2019-12-24 12:06:55
  适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 适配器模式的用途    用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极、阴极外,还有一个地极。而有些地方的电源插座却只有两极,没有地极。电源插座与笔记本电脑的电源插头不匹配使得笔记本电脑无法使用。这时候一个三相到两相的转换器(适配器)就能解决此问题,而这正像是本模式所做的事情。 适配器模式的结构   适配器模式有 类的适配器模式 和 对象的适配器模式 两种不同的形式。 类适配器模式   类的适配器模式把适配的类的API转换成为目标类的API。   在上图中可以看出,Adaptee类并没有sampleOperation2()方法,而客户端则期待这个方法。为使客户端能够使用Adaptee类,提供一个中间环节,即类Adapter,把Adaptee的API与Target类的API衔接起来。Adapter与Adaptee是继承关系,这决定了这个适配器模式是类的:   模式所涉及的角色有:   ●   目标(Target)角色: 这就是所期待得到的接口。注意:由于这里讨论的是类适配器模式,因此目标不可以是类。   ●   源(Adapee)角色: 现在需要适配的接口。   ●   适配器(Adaper)角色: 适配器类是本模式的核心。适配器把源接口转换成目标接口

适配器模式(Adapter Pattern)

≡放荡痞女 提交于 2019-12-24 10:40:46
定义: 适配器模式,即定义一个包装类,用于包装不兼容接口的对象 解决的问题: 原本由于接口不兼容而不能一起工作的那些类可以在一起工作 类别: 类的适配器模式和 对象的适配器模式 uml类图: 模式组成 目标接口(Target) :客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口 需要适配的类(Adaptee) :需要适配的类或适配者类 适配器(Adapter) :通过包装一个需要适配的对象,把原接口转换成目标接口 优点: 更好的复用性 系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。 透明、简单 客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单 & 更直接 更好的扩展性 在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。 解耦性 将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码 符合开放-关闭原则 同一个适配器可以把适配者类和它的子类都适配到目标接口;可以为不同的目标接口实现不同的适配器,而不需要修改待适配类 缺点: 过多的使用适配器,会让系统非常零乱,不易整体进行把握 举个栗子 定义目标接口 interface Target { public void request(); } 定义需要适配的类 class Adaptee { public

门面模式、代理模式、适配器模式的区别

徘徊边缘 提交于 2019-12-24 02:06:58
门面模式、代理模式、适配器模式,这三种模式都很接近,他们的区别是: 1、门面模式: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,简化了系统的使用; 银行柜台办理业务可以理解为门面模式的一种,客户通过银行柜台办理业务,无需了解银行内部复杂的业务逻辑处理,柜台办理员只是把银行能提供的业务为客户端办理,银行没有提供的服务,柜台办理员也无法办理的。 2、代理模式: 为其他对象提供一种代理以控制对这个对象的访问。客户访问不到被代理对象,可以通过代理对象间接的访问;代理对象可以对上次的访问结果进行缓存,下次有相同的请求时可以直接返回缓存而不用去访问被代理对象;代理对象可以拒绝没有访问权限的用户,使其不能访问被代理对象;因此代理模式比门面模式更高级、信息更丰富; 3、适配器模式: 将一个接口转换成客户希望的另外一个接口,使得原本接口不兼容而不能一起工作的那些类可以一起工作。 因为接口的不同,为了让用户使用到统一的接口,把原先的对象通过适配器让用户统一使用,或者扩充新的功能,大多用在代码维护的后期,或者借用第三方库的情况下。 适配器模式比代理模式更复杂,他不仅仅能让客户端访问到实体对象,更能把一堆接口不兼容的实体对象进行有序管理和组织起来,使得他们能协同工作; 来源: https://www.cnblogs.com/laoxia/p/8026201.html