1. 概述
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
2. 解决的问题
Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
3. 模式中的角色
客户角色(Client):与符合Target接口的对象协同。
目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
需要适配的类(Adaptee):需要适配的类或适配者类。
适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
4. 模式解读
GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式。
对象适配器模式
在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。(采用对象组合方式实现)
Adapter与Adaptee是委托关系
a、允许一个Adapter与多个Adaptee同时工作。Adapter也可以一次给所有的Adaptee添加功能
b、使用重定义Adaptee的行为比较困难
类适配器模式
这种适配器模式下,适配器继承自已实现的类(一般多重继承)。
Adapter与Adaptee是继承关系
a、用一个具体的Adapter类和Target进行匹配。结果是当我们想要一个匹配一个类以及所有它的子类时,类Adapter将不能胜任工作
b、使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子集
c、仅仅引入一个对象,并不需要额外的指针以间接取得adaptee
无论哪种适配器,它的宗旨都是:保留现有类所提供的服务,向客户提供接口,以满足客户的期望。即在不改变原有系统的基础上,提供新的接口服务。
5.结构
类适配器使用多重继承对一个接口与另一个接口进行匹配,如下图所示:
对象匹配器依赖于对象组合,如下图所示:
7.代码实现
共用代码:
package com.ihyperwin.designPattern.adapter;
/**
* 对外统一暴露的接口。
* @author ihyperwin
*
*/
public interface Target {
void request();
}
package com.ihyperwin.designPattern.adapter;
/**
* 被适配角色,定义一个已经存在并已经使用的接口,这个接口需要适配。这里需要把specificRequest()方法
* 适配成通用的request()方法。
* @author ihyperwin
*
*/
public class Adaptee {
public void specificRequest(){
System.out.println("specific request!!");
}
}
类适配器实现
package com.ihyperwin.designPattern.adapter;
/**
* 类适配器,继承Adaptee,实现Target接口
* @author ihyperwin
*
*/
public class ClassAdapter extends Adaptee implements Target{
@Override
public void request() {
super.specificRequest();
}
}
package com.ihyperwin.designPattern.adapter;
/**
* 调用类适配器的客户角色
* @author ihyperwin
*
*/
public class ClassClient {
public static void main(String[] args) {
ClassAdapter adapter = new ClassAdapter();
adapter.request();
}
}
对象适配器实现
package com.ihyperwin.designPattern.adapter;
/**
* 对象适配器,在内部封装一个Adaptee对象,实现Target接口
* @author ihyperwin
*
*/
public class InstanceAdapter implements Target{
private Adaptee adaptee;
public InstanceAdapter(Adaptee adaptee){
this.adaptee=adaptee;
}
@Override
public void request() {
this.adaptee.specificRequest();
}
}
package com.ihyperwin.designPattern.adapter;
/**
* 调用对象适配器的客户角色
* @author ihyperwin
*
*/
public class InstanceClient {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
InstanceAdapter adapter = new InstanceAdapter(adaptee);
adapter.request();
}
}
- 大小: 21.4 KB
- 大小: 29.1 KB
分享到:
相关推荐
设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式...
适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,主要解决系统间接口不兼容的问题。适配器模式允许不同接口的类协同工作,通过创建一个适配器对象来转换不兼容的接口,使得原本由于接口不匹配而...
适配器模式是一种在软件工程中广泛使用的结构型设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式扮演着重要的角色,尤其在处理遗留代码或者第三方库集成时,能够有效地解决接口不匹配的问题。...
标题“设计模式之适配器Adapter”暗示我们将深入探讨适配器模式的核心概念和应用场景。适配器模式通常应用于以下场景: 1. 当系统中存在一个已经存在的类,其接口不符合新需求时,可以使用适配器模式来调整接口,使...
适配器模式是软件设计模式中的一种,它的主要目的是解决接口不兼容问题,使得原本由于接口差异无法协同工作的类能够协同工作。在实际的软件开发过程中,我们常常遇到这样的情况:旧有的系统或第三方库提供了丰富的...
适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不兼容的接口之间进行通信。在这个Java实现中,我们将深入探讨适配器模式的两大类型:类适配器模式和对象适配器模式,并通过具体的代码示例和...
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个接口转换为客户端期望的另一个接口。适配器模式常用于解决由于接口不兼容而无法正常工作的类之间的协作问题。 适配器模式的组成 目标接口(Target...
适配器模式(Adapter Pattern)是软件设计模式中的一种,其主要目的是解决系统中的接口不兼容问题,使得原本由于接口不匹配而无法一起工作的类能够协同工作。在本文中,我们将深入探讨适配器模式的概念、结构、作用...
适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在解决系统间的兼容性和接口不匹配问题时。适配器模式的核心思想是将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而无法...
介绍24设计模式中的Adapter模式,如果使用,实例讲解,等等
### Java设计模式之适配器模式详解 #### 引言 在软件开发中,我们经常遇到需要使用已有的类库,但这些类库的接口与我们的需求不匹配的情况。这时,适配器模式(Adapter Pattern)便能派上用场。适配器模式是一种...
在软件设计领域,设计模式是一种经过时间和实践验证的解决方案,用于解决常见的...这个"设计模式之适配器模式与外观模式demo"资源为学习和实践这两种模式提供了宝贵的实例,对于提升编程技能和设计思维具有积极意义。
### 深入浅出设计模式之适配器模式与外观模式 在软件工程领域,设计模式被广泛地应用于解决常见的编程问题。其中,《Head First 设计模式》是一本非常受欢迎的经典著作,它通过生动有趣的例子帮助读者理解并掌握...
适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不同接口的类之间进行通信。适配器模式的核心思想是将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而无法一起工作的类...
适配器模式是一种结构型设计模式,它的主要目的是使不兼容的接口能够协同工作。在实际开发中,我们可能会遇到这样的情况:一个类库或者服务提供了一个接口,而我们的代码需要使用另一个接口。适配器模式就充当了两者...
适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,当系统中存在一个已经存在的组件,但其接口不符合当前项目的需求时,适配器模式就能发挥作用。通过适配器,我们可以复用现有的...