适配器模式

适配器

我是研究僧i 提交于 2019-12-05 17:35:24
适配器是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口。比如:电源适配器、三角架基座转接部件、USB与 串口 的转接设备等。 在计算机中,适配器通常内置于可插入主板上插槽的卡中(也有外置的),卡中的适配信息与处理器和适配器支持的设备间进行交换。 多协议代理支持的协议适配器包括:SNMP、TL1、RMI、CORBA、HTTP和HTML适配器。 适配模式 在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 适配器模式主要应用于,当接口里定义的方法无法满足客户的需求,或者说接口里定义的方法的名称或者方法界面与客户需求有冲突的情况。 两类模式:对象适配器模式 - 在这种适配器模式中,适配器容纳一个它我包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。 适配器不具备数据速率转换功能。 在计算机编程中,适配器包括:容器适配器、迭代器适配器、泛函适配 主机适配器 ( host adapter )或 主机总线适配器 ( host bus adapter , HBA )是以计算机为主机系统

适配器模式

ぃ、小莉子 提交于 2019-12-05 15:42:54
适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。将一个类的接口转换成客户希望的另外一个接口。 1、创建媒体播放器和高级媒体播放器接口 1 public interface MediaPlayer { 2 void play(String audioType,String fileName); 3 } MediaPlayer 1 public interface AdvanceMediaplayer { 2 void playVLC(String fileName); 3 void playMP4(String fileName); 4 } AdvanceMediaplayer 2、高级播放器的2个实现类 1 public class MP4Player implements AdvanceMediaplayer { 2 @Override 3 public void playVLC(String fileName) { 4 5 } 6 7 @Override 8 public void playMP4(String fileName) { 9 System.out.println("Playing mp4 file. Name:"+fileName); 10 } 11 } MP4Player 1 public class VLCPlayer

适配器模式

六月ゝ 毕业季﹏ 提交于 2019-12-05 06:11:18
适配器模式定义:将一个类的接口,转换成客户希望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 场景:妈妈想要吃皇上皇的烤鸭(烤鸭呱呱的叫,能飞很远;火鸡姑姑的叫,只能飞一段距离) 1.妈妈专门提供给的烤鸭接口: public interface IDuck { void Quack(); void Fly(); } 2.但是到了皇上皇,店员说:“我们只有火鸡了,没有烤鸭了,但是我可以帮你用火鸡来冒充一下烤鸭”,我说:“如何冒充?”,“我用这个蓝头的火鸡来冒充下烤鸭把” 以下是火鸡的接口及实现,很明显火鸡的叫法和飞行和烤鸭的不适合; //火鸡接口 public interface ITurkey { void Gobble(); void Fly(); } //蓝头火鸡 public class WildTurkey : ITurkey { public void Gobble() { Console.Write("I Can Gobble.."); } public void Fly() { Console.Write("I Can Fly a Short.."); } } 3.那我们来构造一个烤鸭适配器把,代码如下: public class DuckAdaper : IDuck { ITurkey Turkey; public DuckAdaper(ITurkey

设计模式之适配器模式

旧街凉风 提交于 2019-12-04 17:01:50
定义 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工 作。 UML类图 适配器分为两种,类适配器与对象适配器。 类适配器的UML图: 对象适配器的UML图: 角色 Target: 需要适配为的接口。 Adapter: 适配器类。 Adaptee: 被适配的类。 类适配器与对象适配器 类适配器代码如: public class Adapter extends Adaptee implements Target { public void request() { super.doSomething(); } } 继承了Adaptee被适配类已获取被适配类的所有属性和行为,并实现需要适配为的接口,在接口实现方法中添加适配逻辑。 对象适配器代码如: public class Adapter implements Target { public Adaptee adaptee; public Adapter(Adaptee adaptee){ this.adaptee = adaptee; } public void request() { this.adaptee.doSomething(); } } 其实就是将适配器与被适配的类的关系由继承变为了注入,也就是泛化关系变为了关联关系。 两者的区别是,对象适配器比类适配器更灵活

设计模式——结构型模式之适配器模式(二)

回眸只為那壹抹淺笑 提交于 2019-12-04 09:35:34
模式的定义与特点 适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。 该模式的主要优点如下。 客户端通过适配器可以透明地调用目标接口。 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。 其缺点是:对类适配器来说,更换适配器的实现过程比较复杂。 模式的结构与实现 类适配器模式可采用多重继承方式实现,如 C++ 可定义一个适配器类来同时继承当前系统的业务接口和现有组件库中已经存在的组件接口; Java 不支持多继承,但可以定义一个适配器类来实现当前系统的业务接口,同时又继承现有组件库中已经存在的组件。 对象适配器模式可釆用将现有组件库中已经实现的组件引入适配器类中,该类同时实现当前系统的业务接口。现在来介绍它们的基本结构。 1. 模式的结构 适配器模式(Adapter)包含以下主要角色。 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。 适配器(Adapter)类:它是一个转换器

设计模式--适配器

↘锁芯ラ 提交于 2019-12-04 04:40:59
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 1. 我们来看看 类的适配器模式 从图中可以看到TargetAdapterServiceImpl继承SourceServiceImpl实现了ITargetService 通过TargetAdapterServiceImpl使得ITargetService拥有了SourceServiceImpl的方法2 代码: ITargetService: 1 /** 2 * @author wushe 3 */ 4 public interface ITargetService { 5 /** 6 * 方法2 7 */ 8 void method1(); 9 10 /** 11 * 方法2 12 */ 13 void method2(); 14 } SourceServiceImpl: @Service public class SourceServiceImpl { public void method1(){ System.out.println("method1"); } } TargetAdapterServiceImpl: @Service public class TargetAdapterServiceImpl

适配器模式

心不动则不痛 提交于 2019-12-04 01:11:30
现实生活中的适配器例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以 使用了。 基本介绍 1) 适配器模式( Adapter Pattern )将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper) 2) 适配器模式属于结构型模式 3) 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式 工作原理 1) 适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容 2) 从用户的角度看不到被适配者,是解耦的 3) 用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法 4) 用户收到反馈结果,感觉只是和目标接口交互,如图(关键词:src,adapter,dst ) 类适配器模式 基本介绍: Adapter 类,通过继承 src 类,实现 dst 类接口,完成 src->dst 的适配。 (Adapter extends src implements dst ) 应用实例: 1) 应用实例说明 以生活中充电器的例子来讲解适配器,充电器本身相当于Adapter,220V交流电相当于src (即被适配者),我们的目dst(即 目标)是5V直流电 2) 思路分析(类图) 3) 代码实现 //被适配的类 public

初学设计模式之适配器模式

♀尐吖头ヾ 提交于 2019-12-03 15:33:18
代码例子 1 //适配器模式 2 #include<iostream> 3 #include<string> 4 using namespace std; 5 class AbstractTarget 6 { 7 public: 8 string getName(){}; 9 string getPhoneNum(){}; 10 string getHomeAdr(){}; 11 string getJob(){}; 12 string getOfficeNum(){}; 13 }; 14 class ConcreteTarget 15 { 16 public: 17 string getName() 18 { 19 cout<<"名字"<<endl; 20 return "名字"; 21 }; 22 string getPhoneNum() 23 { 24 cout<<"电话号码"<<endl; 25 return "电话号码"; 26 }; 27 string getHomeAdr() 28 { 29 cout<<"家庭地址"<<endl; 30 return "家庭地址"; 31 }; 32 string getJob() 33 { 34 cout<<"工作职位"<<endl; 35 return "工作职位"; 36 }; 37 string getOfficeNum()

适配器模式

♀尐吖头ヾ 提交于 2019-12-03 13:25:01
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。 我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放 mp3 文件,通过使用一个更高级的音频播放器来播放 vlc 和 mp4 文件。 介绍 意图: 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 主要解决: 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。 何时使用: 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 3、通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。) 如何解决: 继承或依赖(推荐)。 关键代码: 适配器继承或依赖已有的对象,实现想要的目标接口

ThreadPoolExecutor源码中的适配器模式

谁都会走 提交于 2019-12-03 11:20:41
摘自: https://www.cnblogs.com/kingsleylam/p/11784777.html ThreadPoolExecutor源码中的适配器模式 什么是适配器模式 网上已有很多的教程,不细讲了。可以参考: 五分钟了解设计模式(3)---适配器模式 在适配器模式中,一定要识别清楚,Target Adaptee Adapter分别是哪些类或接口,这样才能知道是谁转成谁。 Target: 最终给上下文调用的类 Adaptee: 被适配的类,即需要转成Target Adapter: 将Target和Adaptee连接起来,起转换作用 ThreadPoolExecutor中submit方法用到的适配器模式 ThreadPoolExecutor类提供了submit方法,共有3个重载。这三个方法最终调用到的是execute(Runnable r) 方法,返回一个Future类型的对象(具体为FutureTask类型),相比直接调用execute(Runnable r)方法,调用方可以获得任务执行的结果。三个submit方法, 都使用了适配器模式,才能将顺利调用execute(Runnable r)方法。 先看看public Future submit(Callable task) 在这个方法中,Target是Runnable