适配器(Adaptor)模式PPT教学课件
- 格式:ppt
- 大小:134.50 KB
- 文档页数:21
ADAPTER设计适配器(Adapter)是一种设计模式,用于将一个类的接口转换成客户端所期望的另一种接口。
适配器模式使得原本由于接口不兼容而不能一起工作的类能够协同工作。
适配器通常包含两个部分:适配器类和被适配的类。
适配器类实现了客户端期望的接口,并将其方法转发给被适配类来处理。
被适配的类是原本存在的类,它拥有客户端不兼容的接口。
使用适配器的主要目的是解决接口不兼容的问题。
当我们需要使用一个已经存在的类,但是它的接口与我们所期望的接口不一致时,可以使用适配器模式。
适配器模式可以让我们重用已有的类,同时又不需要修改其原有代码。
这种模式在将不同的第三方库或组件整合到一个系统时特别有用。
适配器模式的应用场景很广泛。
例如,我们可以使用适配器将一个已有的类库适配成符合特定接口的类,以便于在我们的代码中使用。
适配器模式还可以用于将一个新的类库适配成已有的类的接口,以减少代码修改的工作量。
此外,适配器模式还可以用于系统的解耦,将不同的模块之间的接口适配成统一的接口,从而提高系统的灵活性和可维护性。
下面我们来用一个具体的例子来说明适配器设计模式的实际应用。
假设我们正在开发一个音频播放程序,它可以播放不同格式的音频文件,包括MP3、WAV和OGG。
为了实现这个功能,我们引入了一个已有的MP3播放库和一个已有的OGG播放库,但是它们的接口不兼容,我们需要将它们适配成统一的接口。
首先,我们定义一个统一的音频播放接口,包含两个方法:playMP3(和playOGG(。
然后,我们创建一个适配器类AudioPlayerAdapter,实现音频播放接口,并将其方法转发给MP3播放库和OGG播放库来处理。
最后,我们在我们的音频播放程序中使用适配器类来播放各种格式的音频文件。
适配器模式的优点是可以让我们重用已有的类,同时又不需要修改其原有代码。
这种重用的方式是通过适配器的转发机制实现的,因此适配器模式具有很好的灵活性。
另外,适配器模式还可以降低系统的耦合度,通过统一的接口来调用不同的类库或组件,从而提高系统的扩展性和维护性。
适配器(Adapter)模式一、适配器(Adapter)模式适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。
名称由来这很像变压器(Adapter),变压器把一种电压变换成另一种电压。
美国的生活用电电压是110V,而中国的电压是220V。
如果要在中国使用美国电器,就必须有一个能把220V电压转换成110V电压的变压器。
这个变压器就是一个Adapter。
Adapter模式也很像货物的包装过程:被包装的货物的真实样子被包装所掩盖和改变,因此有人把这种模式叫做包装(Wrapper)模式。
事实上,大家经常写很多这样的Wrapper 类,把已有的一些类包装起来,使之有能满足需要的接口。
适配器模式的两种形式适配器模式有类的适配器模式和对象的适配器模式两种。
我们将分别讨论这两种Adapter 模式。
二、类的Adapter模式的结构:由图中可以看出,Adaptee类没有Request方法,而客户期待这个方法。
为了使客户能够使用Adaptee类,提供一个中间环节,即类Adapter类,Adapter类实现了Target接口,并继承自Adaptee,Adapter类的Request方法重新封装了Adaptee的SpecificRequest 方法,实现了适配的目的。
因为Adapter与Adaptee是继承的关系,所以这决定了这个适配器模式是类的。
该适配器模式所涉及的角色包括:目标(Target)角色:这是客户所期待的接口。
因为C#不支持多继承,所以Target必须是接口,不可以是类。
源(Adaptee)角色:需要适配的类。
适配器(Adapter)角色:把源接口转换成目标接口。
这一角色必须是类。
三、类的Adapter模式示意性实现:下面的程序给出了一个类的Adapter模式的示意性的实现:// Class Adapter pattern -- Structural exampleusing System;// "ITarget"interface ITarget{// Methodsvoid Request();}// "Adaptee"class Adaptee{// Methodspublic void SpecificRequest(){Console.WriteLine("Called SpecificRequest()" );}}// "Adapter"class Adapter : Adaptee, ITarget{// Implements ITarget interfacepublic void Request(){// Possibly do some data manipulation// and then call SpecificRequestthis.SpecificRequest();}}///<summary>/// Client test///</summary>public class Client{public static void Main(string[] args){// Create adapter and place a requestITarget t = new Adapter();t.Request();}}四、对象的Adapter模式的结构:从图中可以看出:客户端需要调用Request方法,而Adaptee没有该方法,为了使客户端能够使用Adaptee类,需要提供一个包装(Wrapper)类Adapter。
适配器模式:Adapter1、基本原理适配器模式将一个接口转换成客户希望的另外一个接口。
它使得原来由于接口不兼容而不能在一起工作的那些类可以一起工作。
——Gang of Four有两种类型的适配器模式:–类适配器(采取继承的方式)–对象适配器(采取对象组合方式)(推荐):实现思路:继承新系统,关联旧系统该模式中包含的角色及其职责1 目标接口(Target):客户所期待的接口。
目标可以是具体的或抽象的类,也可以是接口。
2 源类(Adaptee 适配者类):已经存在的接口,通常能满足客户端的功能需求,但是接口和客户端要求的特定领域接口不一致,需要被适配。
3 适配器(Adapter):把Adaptee适配称为Client需要的Target。
2、优缺点充分利用已经存在的资源,实现软件的复用,节省开发成本和时间。
对于类适配器:1. 使得Adapter可以override(重写) Adaptee的部分行为,因为Adapter是Adaptee的一个子类。
2. 用一个具体的Adapter类对Adaptee和Taget进行匹配。
结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。
对于对象适配器:1. 允许一个Adapter与多个Adaptee,即Adaptee本身以及它的所有子类(如果有子类的话)同时工作。
Adapter也可以一次给所有的Adaptee添加功能。
2. 使得override(重写)Adaptee的行为比较困难。
如果一定要override Adaptee的方法,就只好先做一个Adaptee的子类以override Adaptee的方法,然后再把这个子类当作真正的Adaptee源进行适配。
3、适用情况1.正在开发的系统想使用一个已经存在的类,并且该类很重要,但是该类提供的接口和系统不一致。
2.对旧系统的复用。
3.使用了第三方软件,并且第三方提供的软件的接口和系统不一致。
4.两个已经存在的类完成的功能一致,但是接口不一样。
设计模式之适配器模式模式动机
适配器模式的作用就是解决两个软件实体间接口不兼容状况.
通常状况下,用法者可以通过目标类的接口拜访它所提供的服务。
开头时候没有什么问题, 但是一但后续别的接口(如第三方接口)有变动或者后续扩展需求, 此时用法原有接口已经不行以提供服务, 那么我们就需要把现有接口转化为用法者需要的接口.适配器模式就是用来完成这样的转化.
在适配器模式中可以定义一个包装类,包装不兼容接口的对象,这个包装类指的就是适配器(Adapter),它所包装的对象就是适配者(Adaptee),即被适配的类。
模式定义
适配器模式(Adapter Pattern) :将一个接口转换成用法者希翼的
第1页共17页。
适配器模式(Adapter Pattern)以下内容是我和小组的兄弟学习设计模式我做的课件,我整理出来和大家分享,有不妥之处敬请指出.上次做的桥接模式(Bridge),这次是适配器模式(Adapter).概述:在软件开发过程中,我们要经常要复用我们以前开发的一些“现存对象”,但是这些“现存对象”并不能满足我们新的应用环境。
怎样才能良好的复用这些对象,以满足我们的应用环境,这就是适配器(Adapter)所要解决的问题。
意图:将一个类的接口转换成客户希望的另外一个接口。
Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
——《设计模式》GOF生活中的例子:在现实生活中,像这种适配器我们经常见到,而且还是经常使用它,如:手机(深信大家都见过),我们手机在充电的时候,不可能直接在220V电源上直接充电,而是手机“充电器”进行转换成手机需要的电压才可以正常充电,否则就不可以完成充电,这个“充电器”就起到了适配的作用。
1.类的Adapter模式结构图类结构图:代码实现:1namespace Adapter_Pattern2{3public interface ITarget4 {5void GetPower();6 }7///<summary>8/// 220V电源类;9///</summary>10public class Power11 {12///<summary>13///从电源中得到220V的电压; 14///</summary>15public void GetPoer220V()1718 }19 }20///<summary>21///适配器类(充电器);22///</summary>23public class Adapter : Power, ITarget24 {25///<summary>26///得到想要电压;27///</summary>28public void GetPower()29 {30this.GetPoer220V();31 Console.WriteLine("得到手机的充电电压!");32 }33 }客户端调用:1namespace Adapter_Pattern2{3class Program4 {5///<summary>6///这里相当于是手机;7///</summary>8///<param name="args"></param>9static void Main(string[] args)10 {11 Console.Write("手机:");12 ITarget Target = new Adapter();13 Target.GetPower();14 Console.Read();16 }17}特点:它使用多继承的方式来实现,我们只需要调用得到电压(GetPower())方法,由充电器(Adapter)去将220V的电压转成我们需要的电压供我们使用。
设计模式学习笔记-适配器模式1.概述将一个类的接口转换成客户希望的另外一个接口。
Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
2. 解决的问题即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
3. 模式中的角色3.1 目标接口(Target):客户所期待的接口。
目标可以是具体的或抽象的类,也可以是接口。
3.2 需要适配的类(Adaptee):需要适配的类或适配者类。
3.3 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
4. 模式解读注:在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式。
由于类适配器模式通过多重继承对一个接口与另一个接口进行匹配,而C#、java等语言都不支持多重继承,因而这里只是介绍对象适配器。
4.1 适配器模式的类图4.2 适配器模式的代码实现///<summary>///定义客户端期待的接口///</summary>public class Target{///<summary>///使用virtual修饰以便子类可以重写///</summary>public virtual void Request(){Console.WriteLine("This is a common request"); }}///<summary>///定义需要适配的类///</summary>public class Adaptee{public void SpecificRequest(){Console.WriteLine("This is a special request.");}}///<summary>///定义适配器///</summary>public class Adapter:Target{// 建立一个私有的Adeptee对象private Adaptee adaptee = new Adaptee();///<summary>///通过重写,表面上调用Request()方法,变成了实际调用SpecificRequest() ///</summary>public override void Request(){adaptee.SpecificRequest();}}4.3 客户端代码class Program{static void Main(string[] args){// 对客户端来说,调用的就是Target的Request()Target target = new Adapter();target.Request();Console.Read();}}运行结果5. 模式总结5.1 优点5.1.1 通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。
第⼀节:适配器设计模式
⼀、⽣活中适配器例⼦
⼆、基本介绍
1、适配器模式(Adapter Pattern)将某个类的接⼝转换成客户端期望的另⼀个接⼝表⽰,主要⽬的是兼容性,让原本因接⼝不匹配不能⼀起⼯作的两个类可以协同⼯作,⼜被称为包装器(Wrapper)。
2、适配器模式属于结构型模式;
3、主要分为三类:类适配器、对象适配器模式、接⼝适配器模式;
三、适配器模式⼯作原理
1、适配器模式:将⼀个类的接⼝转换成另⼀种接⼝,让原本接⼝不兼容的类可以兼容;
2、从⽤户的⾓度看不到被适配者,是解耦的;
3、⽤户调⽤适配器转化出来的⽬标接⼝⽅法,适配器再调⽤者被适配者的相关接⼝⽅法;
4、⽤户收到反馈结果,感觉只是和⽬标接⼝交互,如图:。