适配器模式

JS设计模式(14)适配器模式

拟墨画扇 提交于 2020-02-10 04:45:34
什么是适配器模式? 定义: 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 主要解决: 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。 何时使用: 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 3、通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。) 如何解决: 继承或依赖(推荐)。 关键代码: 适配器继承或依赖已有的对象,实现想要的目标接口。 应用实例: 1、美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。 2、JAVA JDK 1.1 提供了 Enumeration 接口,而在 1.2 中提供了 Iterator 接口,想要使用 1.2 的 JDK,则要将以前系统的 Enumeration 接口转化为 Iterator 接口,这时就需要适配器模式。 3、在 LINUX 上运行 WINDOWS 程序。 4、JAVA 中的 jdbc。 优点: 1

结构型模式之 适配器模式

假装没事ソ 提交于 2020-02-10 04:45:26
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 意图: 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 主要解决: 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。 何时使用: 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 3、通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。) 如何解决: 继承或依赖(推荐)。 优点: 1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性好。 缺点: 1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 使用场景: 有动机地修改一个正常运行的系统的接口

设计模式学习心得<适配器 Adapter>

泪湿孤枕 提交于 2020-02-10 04:45:16
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。 概述 意图 将一个类的接口转换成客户希望的另外一个接口。 适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 主要解决 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。 何时使用 系统需要使用现有的类,而此类的接口不符合系统的需要。 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 通过接口转换,将一个类插入另一个类系中。 (比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。) 如何解决 继承或依赖(推荐)。 关键代码 适配器继承或依赖已有的对象,实现想要的目标接口。 应用实例 美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。 JAVA JDK 1.1 提供了 Enumeration 接口,而在 1.2 中提供了 Iterator 接口,想要使用 1.2 的 JDK,则要将以前系统的 Enumeration 接口转化为

第7讲:Adapter 适配器模式

梦想与她 提交于 2020-02-10 04:43:20
2006.1.5 李建忠 适配(转换)的概念无处不在 适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口。 动机(Motivation) 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 意图(Intent) 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 ——《设计模式》GoF 例说Adapter应用 这种实际上是一种委派的调用,本来是发送请求给MyStack,但是MyStack实际上是委派给list去处理。MyStack在这里其实就是Adapter(适配对象),list即是Adaptee(被适配的对象),而IStack就是客户期望的接口。 结构(Structure) 适配器有两种结构 -对象适配器(更常用) 对象适配器使用的是对象组合的方案,它的Adapter核Adaptee的关系是组合关系,即上面例子中MyStack和list是组合关系。 OO中优先使用组合模式,组合模式不适用再考虑继承。因为组合模式更加松耦合,而继承是紧耦合的,父类的任何改动都要导致子类的改动。 上面的例子就是对象适配器。 -类适配器

设计模式---接口隔离模式之适配器模式(Adapter)

会有一股神秘感。 提交于 2020-02-10 04:41:31
一:概念 通过Adapter模式可以改变已有类(或外部类)的接口形式 二:动机 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 生活中如电源适配器,vga转换线等,适配器模式可以通过将旧的类接口转化为新接口,从而解决新环境要求的接口问题。 三:模式定义 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。                                        --《设计模式》Gof 四:类图(结构) 五:代码讲解 //目标接口(新接口) class ITarget{ public: virtual void process()=0; }; //遗留接口(老接口) class IAdaptee{ public: virtual void foo(int data)=0; virtual int bar()=0; }; //遗留类型,符合老的接口 class OldClass: public IAdaptee{ //.... }; //对象适配器 class Adapter: public ITarget{ //继承

设计模式《四》_适配器模式

你离开我真会死。 提交于 2020-02-10 04:34:55
主要解决: 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。解决兼容性问题。 关键代码: 适配器继承或依赖已有的对象,实现想要的目标接口。 使用场景: 有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。 接口:MusicPlayer : public interface MusicPlayer { /** * @Author hsir * @Date 13:36 2019-7-16 * @Param [type, filename]音乐格式,文件 * @return void **/ public void play(String type,String filename); } PlayerAdapter: public class PlayerAdapter implements MusicPlayer { //在适配器里面使用旧接口 private ExistPlayer player; public PlayerAdapter(){ player = new ExistPlayer(); } @Override public void play(String type, String filename) { if (type == "mp3"){ player.playMp3(filename);

适配器模式和php实现

北城余情 提交于 2020-02-10 04:03:49
1. 概述   将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 2. 解决的问题   即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 3. 模式中的角色   3.1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。   3.2 源接口/类(Adaptee):需要适配的类或适配者类。   3.3 适配器(Adapter):通过包装一个需要适配的对象,把源接口转换成目标接口。   4. UML图:    5 代码实现: <?php header("Content-type:text/html;Charset=utf-8"); //目标对象 interface Target{ function mothed(); } //源接口 interface Adaptee{ function mothed(); } class ConcreteAdaptee implements Adaptee{ function mothed(){ echo "源方法"; } } //适配器 class Adapter Implements Target{ private $adaptee; function __construct(Adaptee

大话设计模式之适配器模式

这一生的挚爱 提交于 2020-02-10 04:02:16
适配器模式   将一个类的接口转换成客户希望的另一个类的接口。adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 涉及到的角色描述 target: 目标接口可以是类、抽象类、接口 adaptee: 需要适配的类 adapter: 适配器 应用场景   1、系统需要使用现有的类,而此类的接口不符合系统的需要。   2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。   3、通过接口转换,将一个类插入另一个类系中。 具体实现    假设姚明刚进nba并不会说英文时,沟通就会存在障碍,此时急需一名翻译官来为他翻译教练所表达的意思;在适配器设计模式中姚明就是需要适配的类adaptee,翻译官就是adapter 教练表达的内容(目标接口) package com.chenpt.designModel.adapterModel; /** * @Author: chen * @Description: 远动员抽象类 * @Date: created in 2018/8/24 * @Modified By: */ public interface Player { void attack();//进攻 void defense();//防守 }  中锋:具体实现着  package

C++设计模式之适配器模式

北城以北 提交于 2020-02-10 04:02:03
模式概述 在软件开发中,系统的数据和行为都正确,但接口不符合时,我们应该考虑使用适配器,目的是使得控制范围之外的一个原有对象与某个接口匹配。 适配器模式主要应用于希望复用一些现有的类,但是接口又与复用环境要求不一致的情况 ,比如在需要早期代码复用一些功能等应用上很有实际价值。适配器模式的定义如下: 适配器模式(Adapter) ,将一个类的接口转换成客户希望的另外一个接口。Adapter模式将使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器模式中有 类适配器和对象适配器 两种类别,在项目中更推荐使用对象适配器,其结构体如下: 该模式中主要包含以下几个角色: CTarget(目标接口) : 这个是客户所期待的目标接口,可以是具体类,也可以是抽象类。 CAdapter(适配器类) :这个充当适配器,在该角色的内部包含CAdaptee对象,该对象将源接口转换成目标接口,适配器类是适配器模式的核心。 CAdaptee(适配者类) :适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码 据对象适配器模式结构图, 在对象适配器中,客户端需要调用request()方法,而适配者类CAdaptee没有该方法,但是它所提供的specificRequest(

java设计模式-适配器模式

て烟熏妆下的殇ゞ 提交于 2020-02-10 04:00:05
概念: 适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。 分类: 1 类适配器 2 对象适配器 3 接口适配器 一 类适配器: 通过继承来实现适配器功能, 当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后再继承接口B的实现类BB,这样我们可以在适配器P中访问接口B的方法了,这时我们在适配器P中的接口A方法中直接引用BB中的合适方法,这样就完成了一个简单的类适配器。   详见下方实例:我们以apple与android的充电线转接为例,让安卓充电线可以给苹果手机充电 安卓接口 //安卓接口 public interface Android { void isAndroid(); } 苹果接口 //苹果接口 public interface Apple { void isApple(); } 苹果接口实现类 //苹果接口实现类 public class ApplerUser implements Apple { //实现苹果接口 void isApple() { System.out