适配器:将不可行的转换为可行的,比如将别人的女朋友转换为你的女朋友;将别人钱转换为你的钱;将美国的功率转为中国的功率;将不可用的接口转换为可用的接口,诸如此类的,都可称之为适配器。
OK。进入正题。。。。。。。。。。。
在JDK的GUI中,闻名的鼠标监听器就用了适配器的模式,以及等其它的。
把一个类的接口变换成所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.
适配分为:类适配器与对象适配器,前者是使用继承,后者则是持有引有。那么两者有什么区别呢?在实际的项目中应该优先于哪一种呢?请看下文。
首先以实例来说明,在美国标准插座为60HZ,而在天朝准插座为50HZ,那么现在我们需要用美国的插座了,不能直接使用,那么怎以办呢?则需要一个适配器来为我们的转换的工作,将60HZ转换为50HZ的。OK。明白了么?来看代码吧。
一、类适配器
package com.stiven.adapter.classadapter;
/**
* 实际需要的接口是50HZ的
*
* @author 063
* @version N/A
*/
public interface Target
{
public void get50HZ_CH();
}
/**
* 需要转换的接口,我们称之为被适配者
*
* @author 063
* @version N/A
*/
public class SocketAdaptee
{
public void get60HZ_US()
{
System.out.println("美国标准插座");
}
}
/**
* 适配者,想当于一个转换器
*
* @author 063
* @version N/A
*/
public class SocketAdapter extends SocketAdaptee implements Target
{
@Override
public void get50HZ_CH()
{
this.get60HZ_US();
System.out.println("通过转换后....我们可以使用天朝的插座了...");
}
}
那么通过以下测试类,即可以得到我们需要的东西了。
public class Client
{
public static void main(String[] args)
{
Target target = new SocketAdapter();
target.get50HZ_CH();
}
}
OK。看到了吗?类适配器的就是这样干的,适配者去实现接口中的所有方法,并继承被适配者的全部或部分方法,那么用户只需要实现适配器中的接口逻辑后,即可以达到想到的效果。
二、对象适配器
注:部分类与以上相同。
/**
* 对象适配器,实现接口并持有被适配者的引用
*
* @author 063
* @version N/A
*/
public class ObjectAdater implements Target
{
/**
* 被适配者的引用,通常称之为需要转换的对象
*/
private SocketAdaptee socketAdaptee;
public ObjectAdater(SocketAdaptee socketAdaptee)
{
this.socketAdaptee = socketAdaptee;
}
@Override
public void get50HZ_CH()
{
socketAdaptee.get60HZ_US();
System.out.println("通过转换后....我们可以使用天朝的插座了...");
}
}
public class Client
{
public static void main(String[] args)
{
SocketAdaptee socketAdaptee = new SocketAdaptee();
ObjectAdater objectAdater = new ObjectAdater(socketAdaptee);
objectAdater.get50HZ_CH();
}
}
OK。看到了吗?与类适配器不同的是,对象适配器是持有被适配者的引用的。如果以后要转换其它对象,修改相就的适配器即可。
| 顺便在这里说下,对于JDK中的WindowAdapter、MouseAdapter等适配器,那么都是抽象类实现了所有接口中的方法,对于开发者只需实现抽象类的某部分主法,而无需实现接口中的所有方法,这样方便了很多。 |
那么对于这两种异同有哪些呢?我们在实际的开发中,应优先使用哪一种呢?
对于这个问题还是留给大家来讨论吧。
分享到:
相关推荐
JAVA-设计模式-结构型模式-适配器模式
在“设计模式--适配器模式java例子”中,我们可以假设有一个遗留的`OldLibrary`,它的接口与我们当前项目的需求不一致。例如,`OldLibrary`有一个`OldDevice`类,它有一个方法`oldMethod()`,而我们的新系统需要一个...
在Java中,适配器模式常用于将已有类的行为调整为符合新接口的需求,或者将第三方库的类与自己的代码进行集成。在给定的例子中,展示了如何在接口(IFood)和实现(FoodImpl)之间引入一个抽象类来实现适配器模式。 ...
在Java中,适配器模式有两种主要形式:类适配器和对象适配器。 1. **类适配器模式**: 在类适配器模式中,适配器类继承了目标接口,并且包含一个对被适配类的引用。由于Java的单继承特性,此类适配器适用于目标...
适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,这种模式常被用来解决旧系统与新系统、第三方库或者不同组件之间的接口不匹配问题。适配器模式的核心思想是通过创建一个新的类...
在Java中,适配器模式扮演着重要的角色,尤其在处理遗留代码或者第三方库集成时,能够有效地解决接口不匹配的问题。本文将深入探讨适配器模式的概念、类型、优点和如何在Java中实现。 一、适配器模式概念 适配器...
例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template ...
在Java中,适配器模式常用于解决已有类库或对象与新系统需求不匹配的问题。通过适配器,我们可以复用现有的类,而无需修改其源代码,同时也能够满足新的接口需求。 在上述例子中,`IFood`接口定义了三种获取食物的...
java常用设计模式-适配器模式 适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间进行通信。这种模式可以在不修改现有代码的情况下重用现有类,并且可以使不兼容的接口之间进行通信。 ...
这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...
《Java与模式---闫宏》这本书是针对Java程序员深入理解设计模式的重要参考资料。设计模式是软件工程中的一个重要概念,它们代表了在特定上下文中解决常见问题的最佳实践。这本书结合了中国的道家思想,以一种独特的...
在这个Java实现中,我们将深入探讨适配器模式的两大类型:类适配器模式和对象适配器模式,并通过具体的代码示例和UML类图来阐述其工作原理。 首先,我们来理解适配器模式的基本概念。适配器模式就像现实生活中的...
适配器模式是其中的一种,尤其在Java开发中广泛应用。适配器模式是一种结构型设计模式,它的主要目的是使不兼容的接口之间能够进行通信。在这个“讲故事,学(Java)设计模式—适配器模式”的主题中,我们将深入探讨...
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在处理系统集成、遗留代码重用以及不同接口之间兼容性问题时。适配器模式的主要目的是将两个不兼容的接口融合在一起,使得原本无法直接协作...
6. **适配器模式(Adapter Pattern)**:将两个不兼容的接口转换为可以协同工作的形式。在Java中,适配器可以是类或接口。 7. **装饰器模式(Decorator Pattern)**:动态地给一个对象添加一些额外的职责,提供了比...
### 设计模式实验报告——适配器模式 #### 一、引言 设计模式是一种在特定情境下解决软件设计问题的通用解决方案。它为解决常见问题提供了一种可复用的设计思路,帮助开发者构建出更加灵活、易于维护的系统。在...
在"适配器模式.docx"文档中,可能详细介绍了适配器模式的概念、结构、优缺点以及适用场景,并通过具体的Java代码示例展示了如何实现适配器模式。这些示例可能包括类适配器和对象适配器两种形式,展示如何在实际项目...
在这个“设计模式-适配器模式”的资源中,我们可以深入理解适配器模式的概念、应用场景以及实现方式。 适配器模式的核心思想是通过一个中间适配器类来桥接两个不兼容的接口,这个适配器类将旧的接口转换成新的接口...