购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.7 类适配器 VS 对象适配器

大B:“我还是跟你讲讲类适配器和对象适配器吧!举些例子,这样你就明白了。”

小A:“好!”

大B:“要正确地区别这两种适配器的区别,我们还是从一个简单的例子开始吧!我们的系统中有一个具有某个特定功能的类Adaptee,一个客户类Client――他需要一个实现Target接口的对象,和一个Target接口。”以下是他们的源码:

//Adaptee.java
public class Adaptee{
public void specialRequest(){
System.out.println("Called SpecificRequest() in Adaptee ");
}
}
//Client.java
public class Client {
public static void main(String[] args){
Target t =   ……         //new Adapter() ;
t.request();
}
}
//Target.java
public interface Target{
public void request();
}

“根据上一小节的分析我们知道此时需要一个Adapter对象,该对象实现Target接口,同时他又重用现有的Adaptee类。任何有一点点OO(面向对象)知识的人都会想到通过继承可以达到重用的目的。”

下面是通过继承实现Adaptee类重用的例子:

//Adapter.java
public class Adapter extends Adaptee implements Target{
public void request(){
this.specialRequest();
}
}

大B:“看,简单明了吧!现在的过程就是:客户调用Target接口的request方法,实际就是调用其父类Adaptee的specialRequest方法。”

小A:“嘿嘿!这样一说倒真的是简单喔!”

大B:“对啊!这就是大家通常常说的类的适配器!类适配器具有以下的两个特点:1、适配器类(Adapter)实现Target接口;2、适配器类(Adapter)通过继承来实现对Adaptee类的重用。”

下面是一个通过组合关系实现继承的例子,以下是源码:

//Adapter.java
public class Adapter implements Target{
Adaptee adaptee = new Adaptee();
public void request(){
adaptee.specialRequest();
}
}

对于这两者不同的适配器客户代码其实是完全一样的。以下是客户的代码:

//Client.java
public class Client {
public static void main(String[] args){
Target t = new Adapter() ;
t.request();
}
}

大B:“现在可是全明白了吧?”

小A:“嘿嘿!现在都懂了。” vInhUZ3brevSBNsDAeNYU1w+QnO9dRtxBI1q4oRBrKV5iS8f+sSf5uAoNKGol9JJ

点击中间区域
呼出菜单
上一章
目录
下一章
×