发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
结构模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构。结构模式描述两种不同的东西:类与类的实例。根据这一点,结构模式可以分为类的结构模式和对象的结构模式。
后续内容将包括以下结构模式:
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。
名称由来
这很像变压器(Adapter),变压器把一种电压变换成另一种电压。美国的生活用电电压是110V,而中国的电压是220V。如果要在中国使用美国电器,就必须有一个能把220V电压转换成110V电压的变压器。这个变压器就是一个Adapter。
Adapter模式也很像货物的包装过程:被包装的货物的真实样子被包装所掩盖和改变,因此有人把这种模式叫做包装(Wrapper)模式。事实上,大家经常写很多这样的Wrapper类,把已有的一些类包装起来,使之有能满足需要的接口。
适配器模式的两种形式
适配器模式有类的适配器模式和对象的适配器模式两种。我们将分别讨论这两种Adapter模式。
由图中可以看出,Adaptee类没有Request方法,而客户期待这个方法。为了使客户能够使用Adaptee类,提供一个中间环节,即类 Adapter类,Adapter类实现了Target接口,并继承自Adaptee,Adapter类的Request方法重新封装了Adaptee的 SpecificRequest方法,实现了适配的目的。
因为Adapter与Adaptee是继承的关系,所以这决定了这个适配器模式是类的。
该适配器模式所涉及的角色包括:
目标(Target)角色:这是客户所期待的接口。因为C#不支持多继承,所以Target必须是接口,不可以是类。源(Adaptee)角色:需要适配的类。适配器(Adapter)角色:把源接口转换成目标接口。这一角色必须是类。
下面的程序给出了一个类的Adapter模式的示意性的实现:
从图中可以看出:客户端需要调用Request方法,而Adaptee没有该方法,为了使客户端能够使用Adaptee类,需要提供一个包装 (Wrapper)类Adapter。这个包装类包装了一个Adaptee的实例,从而将客户端与Adaptee衔接起来。由于Adapter与 Adaptee是委派关系,这决定了这个适配器模式是对象的。
目标(Target)角色:这是客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。源(Adaptee)角色:需要适配的类。适配器(Adapter)角色:通过在内部包装(Wrap)一个Adaptee对象,把源接口转换成目标接口。
六、 在什么情况下使用适配器模式
在以下各种情况下使用适配器模式:
1、 系统需要使用现有的类,而此类的接口不符合系统的需要。2、 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。3、 (对对象适配器而言)在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。
下面的程序演示了Class Adapter与Object Adapter的应用。
八、 关于Adapter模式的讨论
Adapter模式在实现时有以下这些值得注意的地方:
1、 目标接口可以省略,模式发生退化。但这种做法看似平庸而并不平庸,它可以使Adaptee不必实现不需要的方法(可以参考Default Adapter模式)。其表现形式就是父类实现缺省方法,而子类只需实现自己独特的方法。这有些像模板(Template)模式。2、 适配器类可以是抽象类。3、 带参数的适配器模式。使用这种办法,适配器类可以根据参数返还一个合适的实例给客户端。
来自: 漂在北方的狼 > 《设计模式》
0条评论
发表
请遵守用户 评论公约
Adapter模式 设计模式学习笔记
注:在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式。由于类适配器模式通过多重继承对一个接口与另一个接...
C#设计模式(7)——适配器模式(Adapter Pattern)
C#设计模式(7)——适配器模式(Adapter Pattern)一、引言。到这里适配器模式的介绍就结束了,本文主要介绍了适配器模式的两种实现、分...
结构型模式之适配器模式
适配器模式就是将一个接口或类转换成其它的接口或类,适配器相当于一个包装器,类图如下所示。适配器(Adapter)角色:是适配器模式的核...
设计模式——适配器模式
设计模式——适配器模式(type-c转3.5mm耳机口)//打电话功能 public void call() { System.out.println("打电话"); } //播放...
设计模式 | 适配器模式及典型应用
设计模式 | 适配器模式及典型应用适配器模式。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适...
适配器模式(2)
适配器模式(2)类适配器:类适配器是类间继承;Target角色和Adaptee源角色同类适配器一样,此处省略,唯一不一样的地方在于适配器类Apd...
Java设计模式 之 Adapter
Java设计模式 之 Adapter设计模式中的适配器(也叫变压器)模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配...
设计模式之适配器模式(adapter pattern)
类适配器对象适配器接口适配器。对象适配器可以适配他的父类接口。public class LinkListSort implements AdvanceDataSort { @Override ...
不兼容结构的协调——适配器模式(一)
不兼容结构的协调——适配器模式(一)根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模...
微信扫码,在手机上查看选中内容