Adapter 适配器模式(设计模式03)
将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
——《设计模式》GoF
对象适配器采用对象组合,通过引用一个类与另一个类接口 在对象适配器中通过组合获得Adaptee对象 通过调用Adaptee对象的方法,转换后返回Target结果。
类适配器通过多继承对一个接口与另一个接口进行匹配。
Target定义了Client使用的与特定领域相关的接口,Client通过调用Target实现某一个特定的操作。Adaptee是一个已经存在的类,需要与Target协同工作,这个接口需要适配。Adapter适配器适配Adaptee和Target接口。在类适配器中,通过继承获得Adaptee中的方法。
.NET不支持多重继承,因此当Target是一个类,而不是一个接口时无法实现类适配器,这时需要使用对象适配器。
在国内使用的电源供电电压为220V,美国为380V,当你出差到美国,你的电器需要220V的电压,但旅馆里不提供220V,只提供380,所以,你到市场买了一个电源适配器,在接上适配器后,旅馆里的电源就可以使用在你的电器上了。
Target:标准电源
Adaptee:美国电源
Adapter:适配器
1、实现-Target
private AmericanPower localPower = new AmericanPower(); public override int SupplyPower() int v = localPower.SupplyPower(); if (v != 220) //这里做一些转换工作 v = 220; Console.WriteLine("转换后的电压:{0}", v.ToString()); return v;//转换后,即适配后 }
4、实现-使用
power = new PowerAdapter(); Console.WriteLine("适配后提SupplyPower源电压为:{0}", power.SupplyPower()); //让控制台 等待 Console.ReadLine();
COM Interop就好像是COM和.NET之间的一座桥梁(关于COM互操作更多内容可以参考我的互操作系列)。COM组件对象与.NET类对象是完全不同的,但为了使.NET程序
象使用.NET对象一样使用COM组件,微软在处理方式上采用了Adapter模式,对COM对象进行包装,这个包装类就是RCW(Runtime Callable Wrapper)。RCW实际上是runtime生成的一个.NET类,它包装了COM组件的方法,并内部实现对COM组件的调用。如下图所示:
2..NET中的另外一个适配器模式的应用就是DataAdapter。
ADO.NET为统一的数据访问提供了多个接口和基类,其中最重要的接口之一是IdataAdapter。DataAdpter起到了数据库到DataSet桥接器的作用,使应用程序的数据操作统一到DataSet上,而与具体的数据库类型无关。甚至可以针对特殊的数据源编制自己的DataAdpter,从而使我们的应用程序与这些特殊的数据源相兼容。
适配器模式重在转换接口,它能够使原本不能在一起工作的两个类一起工作,所以经常用在类库复用,代码迁移等方面,有一种亡羊补牢的味道
类适配器和对象适配器可以根据具体实际情况来选用,但一般情况建议使用对象适配器模式
希望创建一个可以复用的类,该类可以与其他不相关的类或者是将来不可预见的类协同工作。
Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况” ,在遗留代码复用、类库迁移等方面非常有用。
GoF 23 定义了两种Adapter模式的实现结构:对象适配器和类适配器。但类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。
Adapter模式可以实现的非常灵活,不必拘泥于Gof23中定义的两种结构。例如,完全可以将Adapter模式中的“现存对象”作为新的接口方法参数,来达到适配的目的。
Adapter模式本身要求我们尽可能地使用“面向接口的编程”风格,这样才能在后期很方便地适配。
设计模式学习(三):Adapter适配器模式 我们先举个例子:如果想让额定工作电压是直流12V的笔记本电脑在交流220V的电源下工作,应该怎么做呢?通常,我们会使用适配器,将家庭用的交流220V电压转换成我们所需要的直流12V电压。这就是适配器的工作,它位于实际情况与需求之间,填补两者之间的差异。
浅谈JAVA设计模式之——适配器模式(Adapter 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
C#设计模式之六适配器模式(Adapter Pattern)【结构型】 原文:C#设计模式之六适配器模式(Adapter Pattern)【结构型】 一、引言 从今天开始我们开始讲【结构型】设计模式,【结构型】设计模式有如下几种:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
相关文章
- 设计模式——代理模式
- 从ES6重新认识JavaScript设计模式: 装饰器模式
- 用适配器模式处理复杂的UITableView中cell的业务逻辑
- 设计模式的C语言应用-建造者模式-第七章
- 设计模式(四)原型模式Prototype(创建型)
- 设计模式——单例模式
- 炒冷饭系列:设计模式 抽象工厂模式
- 基础05:硬盘分区和硬盘模式
- 「补课」进行时:设计模式(7)——租房子中的中介者模式
- 老司机带你玩转面试(4):Redis 高可用之哨兵模式
- Python使用设计模式中的责任链模式与迭代器模式的示例
- 每天一个设计模式之代理模式
- 《设计模式之禅》--空对象模式
- Android N 多窗口模式,你需要知道的一切
- Adapter 适配器模式(设计模式03)
- 简单工厂模式(设计模式02)
- 23种设计模式介绍(三)---- 行为型模式
- Spring中的代理模式
- RocketMQ的Controller模式
- C++设计模式:访问者模式
- Vue-Router中History模式【华为云分享】
- Java设计模式(十) 备忘录模式 状态模式
- 004-行为型-11-解析器模式(Interpreter)
- 004-行为型-08-状态模式(State)
- 移动OA,为企业提供更高效的办公模式
- 设计模式(一)工厂模式Factory(创建型)
- Android网络(4):HttpClient必经之路----使用线程安全的单例模式HttpClient,及HttpClient和Application的融合
- 状态模式
- 设计模式(Python语言)----外观模式
- 【RabbitMQ笔记02】消息队列RabbitMQ七种模式之最简单的模式
- 【设计模式】工厂方法模式(C#)
- 【设计模式】适配器模式
- 23种设计模式 9组合模式