`
天涯海角tour
  • 浏览: 174615 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

java 设计模式之适配器

 
阅读更多
转载:http://www.lshine.com/index.php/2009/05/javaadapter/
了很多关于设计模式的理论讲解,没听进去多少,这篇关于adapter的文章是我见过最好的,很清晰让你知道如何写adapter,转载出来,希望有帮助。。。。
贴一段来至kyo的话, 什么时候使用适配器:
1。系统需要使用现有的类,而此类的接口不符合系统的需要。
2。想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。
3。类或方法的作用相同但名称不同的类或方法之间进行适配

然后进入正题吧!


类适配器
客户的开发人员定义了一个接口,期望用这个接口来完成整数的求和操作,接口定义如下:

View Code JAVA
 public interface Operation{
          public int add(int a,int b);
}
开发人员在了解这个接口的定义后,发现一个第三方类,里面有一个方法能实现他们期望的功能,其代码如下:

View Code JAVA

   public class OtherOperation{
       public int otherAdd(int a,int b){
            return a + b;
       }
 }
以上第三方类OtherOperation的方法public int otherAdd(int a,int b)所提供的功能,完全能符合客户的期望,所以只需要想办法把OtherOperation的otherAdd(int a,int b)和客户的Operation接口联系起来,让这个第三方类来为客户提供他们期望的服务就行了,这样就避免了开发人员再度去研究类似OtherOperation的otherAdd(int a,int b)方法的实现(利用已有的轮子,避免重复发明),这方法之一,就是用适配器模式

View Code JAVA

 public class AdapterOperation extends OtherOperation implements Operation{
       public int add(int a,int b){
            return otherAdd(a,b);
       }
}
以上就是适配器的实现方法之一,类适配器,在以上实现中存在着三中角色分别是:
1:适配目标角色:Operation。
2:适配类(原)角色:OtherOperation。
3:适配器角色:AdapterOperation。
其中适配器角色是适配器模式的核心。
适配器的主要工作就是通过封装现有的功能,使他满足需要的接口。

对象适配器
我们再来看看另一种情况:
假如客户接口期望的功能不止一个,而是多个:

View Code JAVA

 public interface Operation{
       public int add(int a,int b);
       public int minus(int a,int b);
       public int multiplied(int a,int b);
 }
而能提供这些实现的原可能不止一个:

View Code JAVA

public class OtherAdd{
      public int otherAdd(int a,int b){
            return a + b;
      }
 }  
 
 public class OtherMinus{
       public int minus(int a,int b){
           return a - b;
      }
 }  
 
public class OtherMultiplied{
       public int multiplied(int a,int b){
            return a * b;
         }
 }
由于java是不能实现多继承的,所以我们不能通过构建一个适配器,让他来继承所有原以完成我们的期望,这时候怎么办呢?只能用适配器的另一种实现–对象适配器:

View Code JAVA
   1. public class AdapterOperation implements Operation{
   2.       private OtherAdd add;
   3.       private OtherMinus minus;
   4.       private OtherMultiplied multiplied;
   5.
   6.       public void setAdd(OtherAdd add){
   7.             this.add = add;
   8.       }
   9.
  10.       public void setMinus(OtherMinus minus){
  11.             this.minus = minus;
  12.       }
  13.
  14.       public void setMultiplied(OtherMultiplied multiplied){
  15.             this.multiplied = multiplied;
  16.       }
  17.
  18.       //适配加法运算
  19.       public int add(int a,int b){
  20.            return add.otherAdd(a,b);
  21.       }
  22.
  23.       //适配减法运算
  24.       public int minus(int a,int b){
  25.           return minus.minus(a,b);
  26.       }
  27.
  28.       //适配乘法运算
  29.       public int multiplied(int a,int b){
  30.          return multiplied.multiplied(a,b);
  31.       }
  32. }
上面代码很明显,适配器并不是通过继承来获取适配类(原)的功能的,而是通过适配类的对象来获取的,这就解决了java不能多继承所带来的不便了。这也是java提倡的编程思想之一,即尽量使用聚合不要使用继承。
还有一种情况是需要使用对象适配器的。我们来看看,
单我们的客户提供的需求并不是一个明确的接口,而是一个类,并没有定义期望的方法,如下 :

View Code JAVA

public class A{
    public int add(int a,int b){
       return a + b;
    }
 }
现在客户要一个新类B,要求能在保留类A功能的情况下增加一个运算减法的功能,并要求B能随时替换掉A但不能对已有系统造成影响。这样我们只能新建一个类B,并让B继承A。

View Code JAVA

 public class B extends A{
     b(){
       super();
    }  
 
     public int minus(int a,int b){
            //待实现的减法运算函数..
     }
这时候,我们发现类C已经提供了实现减法的函数

View Code JAVA

 public class C{
     public int minus(int a,int b){
            return a - b;
     }
 }
为了避免重复去设计该函数,我们决定引入C类,通过适配C类来达到我们的期望,但问题是A和C都是一个具体类,我们无法让B同时继承这个两个类,而B继承A又是必须的,所以我们只能考虑把C给内聚到B内部,对象适配器又得派上用场了。

View Code JAVA

 public class B extends A{  
 
    private C c;  
 
     B(){
       super();
     }  
 
    public void setMinus(C c){
            this.c= c;
     }  
 
     public int minus(int a,int b){
           return c.minus(a,b);
    }
 }
这样,在需要A类的地方都能用B类来代替,同时又保证了新的功能的引入。

这是比较简单的介绍了adapter,很适合我这样的初学者。

 

分享到:
评论

相关推荐

    Java设计模式之适配器模式

    ### Java设计模式之适配器模式详解 #### 引言 在软件开发中,我们经常遇到需要使用已有的类库,但这些类库的接口与我们的需求不匹配的情况。这时,适配器模式(Adapter Pattern)便能派上用场。适配器模式是一种...

    java设计模式之适配器模式

    适配器模式是一种在软件工程中广泛使用的结构型设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式扮演着重要的角色,尤其在处理遗留代码或者第三方库集成时,能够有效地解决接口不匹配的问题。...

    java设计模式之适配器模式.zip

    适配器模式是一种在软件设计中广泛使用的结构型设计模式,它的主要目的是使不兼容的接口之间能够进行通信。...适配器模式是Java开发者必备的设计模式之一,掌握它能帮助你更好地构建可扩展和可维护的系统。

    JAVA设计模式之适配器模式.docx

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式被广泛应用于各种场景,如文件描述符的处理和框架的日志记录。下面我们将深入探讨适配器模式的核心概念、结构、使用场景...

    深入浅出Java设计模式之适配器模式[借鉴].pdf

    适配器模式是一种结构型设计模式,允许不兼容的接口之间进行交互。在Java中,适配器模式主要通过接口或者抽象类来实现,以达到在不修改现有代码的基础上,使得原本无法一起工作的类协同工作。 适配器模式主要有两种...

    详解JAVA设计模式之适配器模式

    主要介绍了JAVA设计模式之适配器模式的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解

    Java 23种设计模式10适配器模式.pdf

    ### Java设计模式之适配器模式详解 #### 结构型模式概述 在软件工程领域,设计模式被视为一种标准解决方案,用于解决在特定上下文中经常出现的问题。设计模式按其目的和适用场景,大致可分为三种类型:创建型模式...

    JAVA设计模式(抽象类与适配器模式)

    同时,“[浪曦原创]JAVA设计模式 第1讲 抽象类与适配器模式(jzkangta).exe”应该是一个视频教程,可以帮助你更直观地学习。PPT文件“抽象类与适配器模式.ppt”则可能是教学幻灯片,列出了关键点和示例。最后,“demo...

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

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不兼容的接口之间进行通信。在这个Java实现中,我们将深入探讨适配器模式的两大类型:类适配器模式和对象适配器模式,并通过具体的代码示例和...

    java 设计模式之适配器模式的详解

    Java 设计模式之适配器模式的详解 适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的接口,使得原本不能一起工作的类可以一起工作。适配器模式也称为变压器模式或包装...

    java设计模式;适配器模式(类)

    在Java编程领域,设计模式是一种解决常见问题的模板或最佳实践,被广泛应用于软件开发中以提高代码的可重用性、可维护性和可扩展性。适配器模式(Adapter Pattern)是其中的一种,它允许两个不兼容的接口之间进行...

    设计模式之适配器模式

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,主要解决系统间接口不兼容的问题。适配器模式允许不同接口的类协同工作,通过创建一个适配器对象来转换不兼容的接口,使得原本由于接口不匹配而...

    Java设计模式之适配器模式(Adapter模式)介绍

    适配器模式(Adapter模式)是软件设计模式中的一种结构型模式,...适配器模式在Java设计模式中占据着重要的地位,是解决系统间集成问题的有效工具。理解并熟练掌握适配器模式,有助于提高软件设计的灵活性和可扩展性。

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

    适配器模式(Adapter Pattern)是软件设计模式中的一种,其主要目的是解决接口不兼容问题,使得原本因为接口差异无法协同工作的类能够协同工作。在Java中,适配器模式通常分为类的适配器模式和对象的适配器模式。 ...

    Java设计模式之适配器模式和外观模式

    Java设计模式中的适配器模式和外观模式是两种在软件设计中经常使用的结构型模式,它们主要用于解决不同接口间的兼容性和复杂系统简化的问题。 适配器模式的核心思想是通过一个中间层(适配器)来使得原本接口不兼容...

    java常用设计模式-适配器模式

    java常用设计模式-适配器模式 适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间进行通信。这种模式可以在不修改现有代码的情况下重用现有类,并且可以使不兼容的接口之间进行通信。 ...

    Java设计模式之适配器模式简介

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式被广泛用于解决系统之间的兼容性问题,使得旧有的代码或第三方库可以与新系统协同工作。适配器模式有两种主要的形式:类...

Global site tag (gtag.js) - Google Analytics