`
tailsherry
  • 浏览: 136446 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

适配器模式(Adapter)

阅读更多

一、介绍

适配器模式使得一个接口与其它接口兼容,从而给出多个不同接口的统一抽象。换句话说,该模式是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

 

 

二、实例

在本模式的实例部分,我们有一个TeaBag类,由TeaCup来支配使用,完成泡茶的这个过程。

public class TeaBag {     
   boolean teaBagIsSteeped;    
       
   public TeaBag() {   
       teaBagIsSteeped = false;   
   }   
      
   public void steepTeaInCup() {   
       teaBagIsSteeped = true;   
       System.out.println("tea bag is steeping in cup");   
   }   
}   
  
public class TeaCup {     
   public void steepTeaBag(TeaBag teaBag) {   
       teaBag.steepTeaInCup();   
   }   
} 

 

在有一个LooseLeafTee要被引入,换句话说,我现在想泡一杯新买入的LooseLeafTee。

public class LooseLeafTea {  
   boolean teaIsSteeped; 
    
   public LooseLeafTea() {
       teaIsSteeped = false;
   }
   
   public void steepTea() {
       teaIsSteeped = true;
       System.out.println("tea is steeping");
   }
}

 

为了让我的这个TeaCup可以泡这个LooseLeafTee,我们创建一个TeaBall来牵线搭桥。

public class TeaBall extends TeaBag {      
   LooseLeafTea looseLeafTea;    
       
   public TeaBall(LooseLeafTea looseLeafTeaIn) {    
       looseLeafTea = looseLeafTeaIn;    
       teaBagIsSteeped = looseLeafTea.teaIsSteeped;    
   }    
        
   public void steepTeaInCup() {    
       looseLeafTea.steepTea();    
       teaBagIsSteeped = true;    
   }    
}  

 

在实际使用的过程中,我们这样使用这个适配器模式带来的优越感。

class TestTeaBagAdaptation {    
   
   public static void main(String[] args) {    
       TeaCup teaCup = new TeaCup();    
   
       System.out.println("Steeping tea bag");    
       TeaBag teaBag = new TeaBag();           
       teaCup.steepTeaBag(teaBag);    
   
       System.out.println("Steeping loose leaf tea");    
       LooseLeafTea looseLeafTea = new LooseLeafTea();    
       TeaBall teaBall = new TeaBall(looseLeafTea);    
       teaCup.steepTeaBag(teaBall);    
   }    
} 
 

 

三、分析

从以上的实例,我们大致可以总结出适配器模式的几个主要角色:

  • Client 客户对象,即处理业务逻辑的主体,如实例中的TeaCup;
  • Target 目标对象,也是Client使用的与特定领域相关的接口,如实例中的TeaBag;
  • Adaptee 被改编(适应)者,target需要协同工作的接口,如实例中的LooseLeafTea;
  • Adapter 适配器(改编者),对Adaptee的接口和Target接口进行适配,如实例中的TeaBall;

实现一个适配器模式,我们需要首先要定义Target和Adaptee,这里的Target即是Client已经认定的操作对象,而Adaptee可以理解为一个新来者,现在我们需要对它进行改造,使它也可以为Client所使用,当然,这就是Adapter的主要任务了。
1、创建这个Adapter非常关键,要保持Target的原汁原味,那么Adapter首先要继承(extends)Target的一切。
2、Adapter要做到改造Adaptee,首先要引入这个Adaptee,比如说通过Adapter的构造函数来引入一个Adaptee对象。
3、在Target的原有的方法中,我们在Adapter中进一步包装,通过Adaptee的方法来替换或渲染已有的逻辑,真正做到融为一体。

 

总之,适配器模式就是在不改变Adaptee的前提下,让它和现有的系统协调工作。举一个比较实际的例子,当你从第三方购买到了这个Adaptee,但是没有他的源代码,这时就很有必要考虑适配器模式了。

 

在Gof中有两种适配器模式,一种本文提起的,也是比较通用的。还有一种是使用对象版本的方式来实现适配器(Adapter)模式的,这个以后我再补充。

分享到:
评论

相关推荐

    PHP设计模式(五)适配器模式Adapter实例详解【结构型】

    适配器模式(Adapter Pattern)是一种结构型设计模式,它主要解决的是接口不兼容的问题,使得原本由于接口差异无法一起工作的类能够协同工作。在PHP中,适配器模式通过创建一个包装类(适配器类)来转换不兼容的接口...

    适配器模式adapter,含源码下载

    适配器模式(Adapter Pattern)是一种结构型设计模式,它能将两个不兼容的接口连接在一起,使得原本由于接口不匹配而无法一起工作的类能够协同工作。在IT行业中,适配器模式广泛应用在系统集成、组件重用以及解决...

    java 汽车适配器(Adapter适配器模式)

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式被广泛应用于解决系统间的兼容性问题,尤其是当我们需要将一个已有的类库或者对象与我们的系统接口相匹配时。汽车适配器的...

    设计模式——适配器模式(adapter)

    适配器模式(Adapter Pattern)是软件设计模式中的一种,其主要目的是解决系统中的接口不兼容问题,使得原本由于接口不匹配而无法一起工作的类能够协同工作。在本文中,我们将深入探讨适配器模式的概念、结构、作用...

    设计模式C++学习之适配器模式(Adapter)

    适配器模式(Adapter)是软件工程中一种常用的设计模式,它允许两个不兼容的接口之间进行通信。在C++编程中,适配器模式能够帮助我们复用现有的类,或者将第三方库的接口与我们的系统接口进行对接,从而提高代码的可...

    设计模式之 适配器 Adapter C++ 源码

    设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式...

    c++-设计模式之适配器模式(Adapter Pattern)

    适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个接口转换为客户端期望的另一个接口。适配器模式常用于解决由于接口不兼容而无法正常工作的类之间的协作问题。 适配器模式的组成 目标接口(Target...

    java设计模式之适配器模式

    适配器模式(Adapter Pattern)是通过创建一个新的对象(适配器),这个对象将原本不兼容的对象接口转换为客户端期望的接口,从而使两者能够协同工作。适配器模式可以分为类适配器和对象适配器两种类型。 1. 类...

    适配器(Adapter)模式

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,当系统中存在两种不兼容的接口或者类需要协同工作时,适配器模式可以发挥关键作用。通过适配器,我们可以复用现有的类,而无需...

    设计模式之适配器模式Java实现和类设计图

    文件列表中的"adapter"可能包含了适配器模式的Java源代码文件,这些文件通常会包含以上提到的三个角色的定义。例如,可能会有`Target.java`(目标接口),`Adaptee.java`(被适配者类),以及`Adapter.java`(类...

    适配器模式(Adapter)demo

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件开发中,我们常常遇到这样的情况:一个系统中的组件需要与另一个系统或库中的组件交互,但它们之间的接口不匹配,这时候就需要适配器模式...

    设计模式之适配器模式(Adapter Pattern)

    适配器模式是软件设计模式中的一种,它的主要目的是解决接口不兼容问题,使得原本由于接口差异无法协同工作的类能够协同工作。在实际的软件开发过程中,我们常常遇到这样的情况:旧有的系统或第三方库提供了丰富的...

    第9讲_适配器模式(Adapter)

    适配器模式是一种设计模式,它允许不兼容的类或接口之间进行通信和协作。这种模式的核心在于创建一个适配器类,该类将原始类(Adaptee)的接口转换为客户期望的目标接口(Target)。适配器模式分为基于类的适配器...

    设计模式之适配器模式

    2. 适配器(Adapter)类:这是适配器模式的核心,它实现了目标接口,并持有对适配者对象的引用。适配器类负责将适配者的接口转换为目标接口。 3. 适配者(Adaptee)类:这是需要适配的原始接口或类,它的接口与目标...

    适配器模式demo源码

    适配器模式是一种常用的设计模式,它在软件开发中起到了桥梁的作用,允许两个不兼容的接口之间进行通信。在这个“适配器模式demo源码”中,我们可以深入理解这一模式的实现方式及其应用场景。 适配器模式的核心思想...

    设计模式 之 “适配器模式[Adapter Pattern]”

    适配器模式(Adapter Pattern)是软件设计模式中的一种,其主要目的是使两个不兼容的接口之间能够协同工作。在IT行业中,我们经常遇到不同系统、库或组件之间的接口不一致,导致它们无法直接交互。适配器模式就提供...

    设计模式 - 适配器模式(C++实例)

    在`DesignMode_Adapter`这个压缩包文件中,可能包含了相关的C++源码示例,演示了如何创建和使用适配器模式。这些源码可能包括了目标接口、原始接口、适配器类的定义以及客户端如何通过适配器进行调用的示例。通过...

    Adapter(适配器模式)

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,当系统中存在已有的类或库,而我们希望使用它们的功能,但其接口与我们的需求不匹配时,适配器模式就显得尤为重要。通过适配器,...

Global site tag (gtag.js) - Google Analytics