GOF《设计模式》一书对Adapter模式是这样描述的:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。其中,我的疑问是: 1.描述中的接口是什么意思,是不是传统意义上说的接口?
2.”接口不兼容而不能一起工作的类“这句话究竟是什么意思呢,接口不兼容是什么意思,为什么不能一起工作,是否可以举个实例来理解一下。
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。其中,我的疑问是: 1.描述中的接口是什么意思,是不是传统意义上说的接口?
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)再具体点,不知道楼主做过通信么,通信中有不同的协议,我们要把一种协议转换为另外种协议,
我们就要做适配器,把一种协议的数据取出来,包装成另外种协议的书向外传。
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();
}
}