适配器模式

C++设计模式之适配器模式(adapter)(结构型)

萝らか妹 提交于 2020-01-26 06:41:41
一、结构型模式概述 结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。 结构型模式可以分为 类结构型模式 和 对象结构型模式 : • 类结构型模式 关心 类的组合 ,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在 继承关系和实现 关系。 • 对象结构型模式 关心 类与对象的组合 ,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式。 类适配器和对象适配器区别 类适配器的重点在于类,是通过构造一个继承Adaptee类来实现适配器的功能; 对象适配器的重点在于对象,是通过在直接包含Adaptee类来实现的,当需要调用特殊功能的时候直接使用Adapter中包含的那个Adaptee对象来调用特殊功能的方法即可。 注意事项: 类适配器使用多重继承对一个接口与另一个接口进行匹配。对象适配器依赖于对象组合。类适配器和对象适配器有不同的权衡。 类适配器 :A、用一个具体的Adapter类对Adaptee和Target进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作;B

Java设计模式 — 适配器模式(Adapter)

ε祈祈猫儿з 提交于 2020-01-26 06:15:28
适配器模式(Adapter) 把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 介绍 用电器来打个比喻:有一个电器的插头是三脚的,而现有的插座是两孔的,要使插头插上插座,我们需要一个插头转换器,这个转换器即是适配器。 适配器模式涉及3个角色: 源(Adaptee):需要被适配的对象或类型,相当于插头。 适配器(Adapter):连接目标和源的中间对象,相当于插头转换器。 目标(Target):期待得到的目标,相当于插座。 工作中的场景 经常用来做旧系统改造和升级 如果我们的系统开发之后再也不需要维护,那么很多模式都是没必要的,但是不幸的是,事实却是维护一个系统的代价往往是开发一个系统的数倍。 1.类适配器模式 代码实现 源(Adaptee) public class Adaptee { public void method1 ( ) { System . out . println ( "method 1" ) ; } } 目标(Target) public interface Target { void method1 ( ) ; void method2 ( ) ; } 适配器(Adapter) public class Adapter extends Adaptee implements Target {

适配器模式(Adapter)

那年仲夏 提交于 2020-01-25 20:32:53
在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。 在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。 模式的定义与特点 适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式、接口的适配器模式三种,类结构型模式类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。 该模式的主要优点如下。 客户端通过适配器可以透明地调用目标接口。 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。 其缺点是:对类适配器来说,更换适配器的实现过程比较复杂。 模式的结构与实现 类适配器模式可采用多重继承方式实现,如c++可定义一个适配器类来同时继承当前系统的业务接口和现有组件库中已经存在的组件接口; java 不支持多继承

c++ 结构型模式-适配器(Adapter)

ⅰ亾dé卋堺 提交于 2020-01-23 19:31:35
1) 意图: 将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 2) 结构: 适配器两种结构,一种继承实现,一种组合实现   a. 继承方式:    b. 组合方式:    其中: Target 定义 Client 使用的与特定领域相关的接口 Client 与符合 Target 接口的对象协同 Adaptee 定义一个已经存在的接口,这个接口需要适配 Adapter 对 Adaptee 的接口与 Target 接口进行适配 3) 适用性: 想使用一个类,但是它的接口不符合要求 想创建一个可以用的类,该类可以和其他不相关的类或不可预见的类协同工作 想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口 4) 举例:   a. 继承方式:    1 #include <iostream> 2 class Target 3 { 4 public: 5 Target() {} 6 virtual ~Target() {} 7 virtual std::string Request() = 0; 8 }; 9 10 class Adaptee 11 { 12 public: 13 Adaptee() {} 14 virtual ~Adaptee() {} 15 void SpecificRequest(std:

适配器模式-学习

柔情痞子 提交于 2020-01-23 16:58:52
1.适配器模式,可以将截然不同的函数接口封装成统一的API 2.实际应用举例,PHP的数据库操作有mysql,mysqli,pdo3种,可以用适配器模式统一成一致。类似的场景还有cache适配器,将memcache,redis,file,apc等不同的缓存函数,统一成一致.对象接口 interface IDatabase { public function connect($host, $user, $password, $dbname); public function query($sql); public function close(); } PDO.php use imooc\IDatabase; class PDO implements IDatabase { protected $conn; public function connect($host, $user, $password, $dbname) { $conn = new \PDO('mysql:host='.$host.';dbname='.$dbname, $user, $password); $this->conn = $conn; } public function query($sql) { return $this->conn->query($sql); } public function

适配器模式——《设计模式》

前提是你 提交于 2020-01-22 02:17:57
1. 概述 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 2. 模式中的角色 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。 需要适配的类(Adaptee):需要适配的类或适配者类。 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。 3. 实现方式 类的适配器模式(采用继承实现) 对象适配器(采用对象组合方式实现) 4. 代码 // 已存在的、具有特殊功能、但不符合我们既有的标准接口的类 class Adaptee { public void specificRequest ( ) { System . out . println ( "被适配类具有 特殊功能..." ) ; } } // 目标接口,或称为标准接口 interface Target { public void request ( ) ; } // 具体目标类,只提供普通功能 class ConcreteTarget implements Target { public void request ( ) { System . out . println ( "普通类 具有 普通功能..." ) ; } } // 适配器类,继承了被适配类,同时实现标准接口 class

Linux中IIC总线驱动分析

断了今生、忘了曾经 提交于 2020-01-21 07:26:01
虽然I2C硬件体系结构比较简单,但是I2C体系结构在Linux中的实现却相当复杂.通过阐述Linux系统中I2C总线体系结构,在此基础上完成嵌入式Linux系统中I2C总线驱动的开发. 1. 嵌入式Linux中I2C驱动程序分析 I2C(Inter2IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.嵌入式系统中,微控制器通过I2C总线可随时可对各个系统中的组件进行设置和查询,以管理系统的配置或掌握组件的功能状态来控制外围设备.I2C总线因为协议成熟,引脚简单,传输速率高,支持的芯片多,并且有利于实现电路的标准化和模块化,得到了包括Linux在内的很多操作系统的支持,受到开发者的青睐.在Linux环境下使用I2C总线协议,需要理解Linux的I2C总线驱动的体系结构,在此基础上来进行嵌入式驱动程序和应用程序的开发. 1.1 Linux的I2C驱动框架 Linux内核的I2C总线驱动程序框架如图1所示: Linux的I2C体系结构分为3个组成部分: I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法(即"al2gorithm")上层的,与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等.这部分是与平台无关的

乾坤合一~Linux设备驱动之I2C核心、总线以及设备驱动

和自甴很熟 提交于 2020-01-21 06:11:53
我思念的城市已是黄昏 为何我总对你一往情深 曾经给我快乐 也给我创伤 曾经给我希望 也给我绝望 我在遥远的城市 陌生的人群 感觉着你遥远的忧伤 我的幻想 你的忧伤,像我的的绝望,那样漫长,,,,,这是今天的旋律,直入心底~~~~~~~~~~~~~~~~   在Linux 系统中,I2C 驱动由3 部分组成,即I2C 核心、I2C 总线驱动和I2C 设备驱动,I2C 总线仅仅使用SCL、SDA 这两根信号线就实现了设备之间的数据交互,极大地简化了对硬件资源和PCB 板布线空间的占用 1 Linux的I2C体系结构 1.1 组成部分 1) I2C核心 I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,i2C通信方法等等 2) I2C总线驱动 I2C 总线驱动主要包含了I2C 适配器数据结构i2c_adapter、I2C 适配器的algorithm数据结构i2c_algorithm 和控制I2C适配器产生通信信号的函数。是对I2C硬件体系结构中适配器端的实现适配器可由CPU 控制,甚至可以直接集成在CPU 内部。 3) I2C设备驱动 I2C 设备驱动主要包含了数据结构i2c_driver 和i2c_client ,我们需要根据具体设备实现其中的成员函数。是对I2C硬件体系结构中设备端的实现,设备一般挂接在受 CPU 控制的I2C适配器上,通过I2C 适配器与CPU 交换数据。

适配器模式

不羁岁月 提交于 2020-01-20 04:55:53
首次接触适配器模式的就是操作数据库的 SqlDataAdapter 这就是典型适配器模式 将一个类的接口转换成客户希望的另外一个接口。 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 最简单的例子,我们电脑是3插头,但是墙上只有2插头,我们可以通过外插一个2转3的接头,让电脑的3插头插在这上面,这就是适配器的思想 来源: https://www.cnblogs.com/ningxinjie/p/12216458.html

MyBatis框架之适配器模式

六眼飞鱼酱① 提交于 2020-01-20 00:00:54
MyBatis框架有多处使用了设计模式,我们在阅读其源码时,需要好好体会它对设计模式的使用,以便于照着葫芦画瓢。本篇主要是记录一下适配器模式的使用。 适配器模式理解起来很简单,相当于使用了一个接口,将老旧的功能包装一下,使之适应新的需求(或许有错误,但错就错吧)。 MyBatis框架对适配器的使用,主要体现在Log日志这一块。 MyBatis自个定义了一个Log接口,接口嘛,规范而已。 而而且要怎么操作我不管,只需要按照我的规范来即可。 /** * MyBatis定义的日志接口规范 */ public interface Log { boolean isDebugEnabled(); boolean isTraceEnabled(); void error(String s, Throwable e); void error(String s); void debug(String s); void trace(String s); void warn(String s); } 该接口定义了Mybatis直接使用的日志方法,而Log接口具体由谁来实现呢?Mybatis提供了多种日志框架的实现,这些实现都匹配这个Log接口所定义的接口方法,最终实现了所有外部日志框架到Mybatis日志包的适配。 MyBatis就是这么刚,提供了如此之多实现方式。 啥意思呢