GOF《设计模式》一书对Adapter模式是这样描述的:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。其中,我的疑问是:   1.描述中的接口是什么意思,是不是传统意义上说的接口?
   2.”接口不兼容而不能一起工作的类“这句话究竟是什么意思呢,接口不兼容是什么意思,为什么不能一起工作,是否可以举个实例来理解一下。

解决方案 »

  1.   

    我google过了,我看过很多个作者讲述的版本了,jdom的板桥里人的,阎宏博士的,gof的,但是感觉还是有点弄不清楚,我发贴主要是针对帖子里问到的两个问题的,谢谢
      

  2.   

    一起讨论一下:
           mystery1004说的很对,也是<<JAVA与模式>>开头引入Adapter Patten的例子!
      接着以我个人的理解回答楼主的两个问题:
     1.描述中的接口是什么意思,是不是传统意义上说的接口? 
       狭义上讲或者说针对程序员来说是传统意义上的接口,广义上讲目标(Target)和源(Adaptee)都是接口
    如:电脑鼠标接口有USB和PS/2两种,电脑上的接口是源,操作的鼠标接口是目标,但是两者可能不匹配,那么好市场上就有usb,PS/2的转化器,这个就是适配器(Adapter);
    2.”接口不兼容而不能一起工作的类“这句话究竟是什么意思呢,接口不兼容是什么意思,为什么不能一起工作,是否可以举个实例来理解一下。 
       根据上面的例子应该知道这句话的意思了吧。
       那么对程序中怎么理解呢?
       举个例子:
          1)楼主应该知道O/R Mapping吧, O,R就是目标和源,那么Mapping就是Adapter。
          2)再具体点,不知道楼主做过通信么,通信中有不同的协议,我们要把一种协议转换为另外种协议,
             我们就要做适配器,把一种协议的数据取出来,包装成另外种协议的书向外传。
      

  3.   

    1.这里"接口"指的是可供他人调用的方法,不是指class,interface,abstract class这个定义里面的接口。
    2.其实"适配器模式"可以通俗的解释为:将一个对象包装,使其看起来像另外一个对象(像用另外的对象那样使用它)。
    代码:public class Duck { public void guagua(){
    System.out.println("i am a duck,gua!gua!gua!");
    }
    }public class Dog { public void wangwang(){
    System.out.println("I am a dog,wang!wang!wang!");
    }
    }/**
     * 组合适配器
     * 将Dog变成Duck的适配器(使别人能像用Duck一样用Dog)
     *
     */
    public class AdapaterForDogToDuck { private Dog dog;

    public AdapaterForDogToDuck(Dog dog) {
    this.dog = dog;
    }

    /**
     * guagua()是Duck的方法,
     */
    public void guagua(){
    dog.wangwang();
    }
    }/**
     * 继承适配器
     * 将Dog变成Duck的适配器(使别人能像用Duck一样用Dog)
     *
     */
    public class AdapaterForDogToDuck1 extends Dog{ /**
     * guagua()是Duck的方法,
     */
    public void guagua(){
    super.wangwang();
    }
    }
      

  4.   

    我们要像用Duck一样用Dog的话就不会直接用Dog了,而是用它的Duck适配器AdapaterForDogToDuck!另外:我觉得还是要有已定的代码量后再看设计模式比较好!