适配器模式

设计模式—适配器模式

社会主义新天地 提交于 2020-12-03 15:29:03
转载请注明出处: http://blog.csdn.net/singwhatiwanna/article/details/17659905 前言 适配器模式在设计模式体系中属于结构型模式,可以分为三类:类的适配器模式、对象的适配器模式和接口的适配器模式,由于类和接口的适配器模式需要适配器继承原有的类,而纯面向对象语言Java、C#都是不支持多继承的,这在一定程度上制约了类和接口的适配器模式的使用场景,故使用的时候要注意。 使用目的 :将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 类适配器模式 说明: 当新接口出现的时候,由于和老的接口不兼容,这个时候,我们采用一个适配器类实现新的接口并且继承老的业务类,这样就能同时处理新老业务。 示例代码: /** * 原始类 */ class Source { public void oldFunction() { System.out.println("oldFunction:Source"); } } interface Target { void oldFunction(); // 新接口 void newFunction(); } // 适配器,用来做接口转换 class Adapter extends Source implements Target { public

适配器模式——结构型模式

≯℡__Kan透↙ 提交于 2020-04-06 21:30:45
思路: 一个软件团队开发绘图系统,设计了圆对象(Circle)、矩形对象(Rectangle),线对象(Line)。都支持Draw()函数,即可以通过Draw()函数绘制图形。我们应该如何做呢? namespace Adapter { class Program { static void Main(string[] args) { Circle circle = new Circle(); Rectangle rect = new Rectangle(); Line line = new Line(); test(circle); test(rect); test(line); Console.ReadKey(); } static void test(IDrawPic drawpic) { drawpic.draw(); } } interface IDrawPic { void draw(); } class Circle : IDrawPic { public void draw() { Console.WriteLine("我画了一个圆"); } } class Rectangle : IDrawPic { public void draw() { Console.WriteLine("我画了一个矩形"); } } class Line : IDrawPic {

设计模式

纵然是瞬间 提交于 2020-04-05 18:52:46
适配器模式 生活中,充电插头有两脚的、三脚的,还有圆形的,如果想使这些插头都能工作,就需要一个多功能适配器 基本介绍 适配器模式(Adapter Pattern)属于 结构性模式 ,它可以将某个类的接口转换为客户端期望的另一个接口表示,主要目的是 兼容性 ,让原本因接口不匹配不能一起工作的两个类可以协同工作,其别名为 包装器 (Wrapper)。适配器模式主要分为三类: 类适配器模式 、 对象适配器模式 、 接口适配器模式 。 工作原理 让原本接口不兼容的类可以兼容 从用户的角度看不到被适配者,是解耦的 用户调用适配器转化出来的目标接口方法,适配器去再调用被适配者的相关接口方法 类适配器模式 实现原理 Adapter 类继承 src 类,实现 dst 接口,完成 src 对 dst 的适配。 案例 插座(Voltage220V)的输出电压是220V,充电插头(Voltage5V)输出电压是5V,这时候就需要一个适配器(VoltageAdapter)转换电压,才能给手机(Phone)充电 代码实现 电源输出电压为220V public class Voltage220V { public int output220V() { int src = 220; System.out.println("电源输出" + src + "V"); return src; } }

结构模式之适配器模式

筅森魡賤 提交于 2020-04-05 15:47:09
1 概述 适配器模式 (Adapter Pattern),从名字就可以看出,工作模式类似于 适配器 :将原本不兼容的两样事物连接,以协同工作。 2 适配器模式 充电器(电源适配器)是日常生活中常见的例子。大多手机要求输入电压是 5V ,而家用交流电的电压都是 220V ,充电器作为适配器,将 220V 的电压转为目标电器需要的电压。 适配器模式 也类似,通过 适配器 ,将类的接口转换为目标所期望的另一个接口。 适配器模式 是 开闭原则 的体现,通过增加一个 适配类 ,避免了对原有逻辑的修改。 3 案例 适配器模式 主要有三种类型:类适配器,对象适配器,默认适配器。下面举例说明。 3.1 类适配器 类适配器 使用的是 继承 模式, 适配器类 即是A接口,又是B接口。下面的例子展现了,如何通过 适配器 ,使得“中国人”说“英语”: public class Test { public static void main(String[] args) { // 普通ChineseSpeaker对象,只能输出中文 ChineseSpeaker xiaoming = new ChinesePeople(); xiaoming.speak(); // 被适配过的ChineseSpeaker对象,可以输出英文 ChineseSpeaker englishTeacher = new

Java 适配器(Adapter)模式

好久不见. 提交于 2020-03-30 13:59:04
一、什么是适配器模式:   把一个接口变成另外一个接口,使得原本因接口不匹配无法一起工作的两个类一起工作。 二、适配器模式的 分类和 结构:   适配器模式有类的适配器模式和对象的适配器模式两种。   1、类的适配器模式:   有时候为了使用现有的类,但是此类接口不符合需求时,需要将一个类的接口与其他类的接口进行组合,达到我们的使用需求。类的的适配器模式就是把被适配的类的API转换成目标类的API,静态结构图如下图所示:   Target希望即使用sampieOperation1()又使用sampieOperation2(),但是很显然Adaptee并不满足要求,现在只能通过一个中间环节Adapter,继承Adaptee类,提供一个sampieOperation2()方法,满足客户端的需求,达到Target的效果。   (1)Target(目标抽象类):所期待的接口。注意,类的适配器模式中,目标不可以是类,而是接口。   (2)Adapter(适配器类):模式的核心类,将原接口转换成目标接口,必须是具体类。   (3)Adaptee(适配者类):需要适配的接口。   (4)Client(客户类):针对目标抽象类编程,调用其定义的方法。 1 /** 2 * 达到客户端要求的目标角色 3 * 4 * @author:Zhou_DX 5 * @sine: 2019年3月25日 下午7

设计模式-适配器模式

拈花ヽ惹草 提交于 2020-03-22 17:18:25
适配器:   定义:可使无直接联系的两个接口或者类能一起工作   方法: 适配器就相当于在运来的基础上增加一层调用关系(封装)。   其他:实现适配器的方法有很多,比如说继承、多继承。 # 案例1: import datetime class AgeCalculator: # 计算年龄的接口 def __init__(self, birthday): self.year, self.month, self.day = (int(x) for x in birthday.split('-')) def calculate_age(self, date): year, month, day = (int(x) for x in date.split('-')) age = year-self.year if (month, day) < (self.month, self.day): age -= 1 return age class DateAgeAdapter: # 适配器:格式化date,不影响其功能 def _str_date(self, date): return date.strftime("%Y-%m-%d") def __init__(self, birthday): birthday = self._str_date(birthday) self.calculator

PHP适配器模式--

半腔热情 提交于 2020-03-19 17:28:59
把一个类的接口变换成客户端所期待的的另一种接口,从而使原本因接口不匹配无法在一起工作的两个类可以一起工作。 适配器的用意是将接口不同而功能相同或者相近的两个接口加以转换,为适配器角色补充一个原角色没有的方法。 一、类的适配器模式 把被适配的类的API转换成目标类的API 涉及的角色: 目标角色(就是所期待的得到的接口,由于这里讨论的是类适配器,因此目标不可以是类 ) 原角色adaptee 现有需要适配的接口。 适配器角色:适配器类,把源接口转换成目标接口。这一角色必须是类。 example: 1 /** 2 * 类的适配器模式 3 */ 4 interface Target{ 5 6 /** 7 * 这里是源类已有的方法 8 */ 9 public function sampleOperation1(); 10 /** 11 * 12 * 源类没有的方法 ... 13 */ 14 public function sampleOperation2(); 15 16 17 18 } 19 20 class adaptee{ 21 22 /** 23 * 此类为源类 24 */ 25 26 public function sampleOperation1(){ 27 28 } 29 30 } 31 /** 32 * 33 * 适配器-- ... 34 * @author

java I/O库中设计模式的应用

南楼画角 提交于 2020-03-18 22:53:08
3 月,跳不动了?>>> 在java语言 I/O库的设计中,使用了两个结构模式,即装饰模式和适配器模式。 在任何一种计算机语言中,输入/输出都是一个很重要的部分。与一般的计算机语言相比,java将输入/输出的功能和使用范畴做了很大的扩充。因此输入输出在java语言中占有极为重要的位置。 java语言采用流的机制来实现输入/输出。所谓流,就是数据的有序排列,流可以是从某个源(称为流源,或者 Source of Stream)出来,到某个目的(Sink of Stream)地去。根据流的方向可以将流分成输出流和输入流。程序通过输入流读取数据,想输出流写出数据。 例如:一个java程序可以使用FileInputStream类从一个磁盘文件读取数据,如下图: 像FileInputStream这样的处理器叫流处理器。一个流处理器就像一个流的管道一样,从一个流源吸入某种类型的数据,并输出某种类型的数据。上面的示意图叫流的管道图。 类似地,也可以用FileOutputStream类向一个磁盘文件写数据,如下图: 在实际的应用当中,这样简单的机制并没有太大的用处。程序需要写出的往往是非常结构话的信息,因此这些Byte类型的数据实际上是一些数字、文字、源代码等。java的I/O库提供了一个称作链接(Chaining)的机制,可以将一个流处理器与另一个流处理器首尾相接,以其中之一的输出为输入

适配器5v3a高性能芯片方案

折月煮酒 提交于 2020-03-16 14:25:57
当今市场电子产品随处可见,5V 3A的USB电源适配器在一定程度上成为了居家必备品,电源适配器厂家在选择电源适配器芯片时会直接影响到整个电源适配器的质量,所以对于企业来说选择一家合适的电源适配器芯片供应商至关重要,骊微电子推荐适配器5v3a高性能芯片方案。 六级能效15W适配器应用方案(AP8266 SOT23-6) ■ 输入电压:90~264Vac全电压范围; ■ 输出规格:5±0.25V/3A  ■ 输出功率:≤15W ■ 设计符合IEC60950中相关安全性要求; ■ 拥有可恢复短路保护,输出过载保护; ■ 次级反馈器件故障后,可进入过载保护,故障排除后恢复工作; ■ 满载输出最大效率:大于84% AP8266是高集成度的电流模式PWM控制芯片,内置绿色工作模式大大减小了待机模式的功耗,更易于满足国际能效标准,同时AP8266含有丰富的保护功能用以提高可靠性,包括:逐周期过流保护、过载保护、过压箝位和过压保护、欠压锁存,拥有的过流保护含有线电压补偿功能,使得在全电压输入范围内能够得到较精确的过载保护。 适配器5v3a高性能芯片方案提供12V3A输出,满载效率大于84% 载待机功耗低于150mW,传导测试满足EN5502 CE Mains ClassB的要求,更多适配器5v3a高性能芯片方案相关了原理图,电源输入输岀规格,BOM表可向骊微电子申请。 来源: 51CTO 作者:

php适配器模式

允我心安 提交于 2020-03-15 11:34:26
适配器的使用将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作,主要应用在第三方api的适配和多个类库的选择适配到我们的应用的接口规则。 例子 /** * 普通媒体接口 */ interface MediaInterface { public function play($file=''); } /** * 音频设备实体 */ class AudioPlayer implements MediaInterface { public function play($file='', $type='') { switch ($type) { case 'mp3': echo 'playing file: ' . $file . ".mp3\n"; break; case 'mp4': $adapter = new Adapter($type); $adapter->play($file); break; case 'wma': $adapter = new Adapter($type); $adapter->play($file); break; default: throw new Exception("$type is not supported", 400); break; } } } /** * 高级媒体接口 */