浅谈java适配器模式

原创 2015年11月17日 19:30:22

基本概念: 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。

主要分类:类的适配器模式、对象的适配器模式、接口的适配器模式。

类的适配器模式

这里写图片描述

在上图中可以看出,Adaptee类并没有sampleOperation2()方法,而客户端则期待这个方法。为使客户端能够使用Adaptee类,提供一个中间环节,即类Adapter,把Adaptee的API与Target类的API衔接起来。Adapter与Adaptee是继承关系,这决定了这个适配器模式是类的.

模式所涉及的角色有:
  ●目标(Target)角色:这就是所期待得到的接口。注意:由于这里讨论的是类适配器模式,因此目标不可以是类。

  ●源(Adapee)角色:现在需要适配的接口。

  ●适配器(Adaper)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类。
看代码:

public class Adaptee {
    public void sampleOperation1(){}
}

public interface Target {
    /**
     * 这是源类Adaptee也有的方法
     */
    public void sampleOperation1(); 
    /**
     * 这是源类Adapteee没有的方法
     */
    public void sampleOperation2(); 
}

public class Adapter extends Adaptee implements Target {
    /**
     * 由于源类Adaptee没有方法sampleOperation2()
     * 因此适配器补充上这个方法
     */
    @Override
    public void sampleOperation2() {
        //写相关的代码
    }
}

对象的适配器模式

这里写图片描述

与类的适配器模式一样,对象的适配器模式把被适配的类的API转换成为目标类的API,与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。
看代码:

public class Adaptee {
    public void sampleOperation1(){}    
}

public interface Target {
    /**
     * 这是源类Adaptee也有的方法
     */
    public void sampleOperation1(); 
    /**
     * 这是源类Adapteee没有的方法
     */
    public void sampleOperation2(); 
}

public class Adapter {
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee){
        this.adaptee = adaptee;
    }
    /**
     * 源类Adaptee有方法sampleOperation1
     * 因此适配器类直接委派即可
     */
    public void sampleOperation1(){
        this.adaptee.sampleOperation1();
    }
    /**
     * 源类Adaptee没有方法sampleOperation2
     * 因此由适配器类需要补充此方法
     */
    public void sampleOperation2(){
        //写相关的代码
    }
}

接口的适配器模式

接口的适配器是这样的:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。
看代码:

public interface Sourceable {  
    public void method1();  
    public void method2();  
}  

public abstract class Wrapper implements Sourceable{  
    public void method1(){}  
    public void method2(){}  
}  

public class SourceSub1 extends Wrapper {  
    public void method1(){  
        System.out.println("the sourceable interface's first Sub1!");  
    }  
}  

总结一下三种适配器模式的应用场景:
类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。
接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

浅谈 java 设计模式--适配器模式(Adaptor pattern)

适配器模式(Adapter Pattern)[GOF95]把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 问题: 我们已经在应用程序中...

浅谈JAVA设计模式之——适配器模式(Adapter)

一、概述 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 二、适用性 1.你想使用一个已经存在的类,而它的接口不符合你的需求。...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

浅谈Java设计模式(六)适配器模式(Adapter)

前言: 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。首先,我们来看看类...

浅谈抽象与接口(含工厂、适配器、代理模式应用)

抽象类和接口抽象类 abstract class A{      // 是定义了一个抽象类        publicstatic final String FLAG = "CHINA&q...

适配器模式浅谈

继上篇策略模式,可以引出一个叫做适配器模式的设计模式 先看下面的代码,还是上篇策略模式的代码段interface Process{ public void process(File file...

ym——浅谈抽象与接口(含工厂、适配器、代理模式应用)(新)

抽象类和接口抽象类 abstract class A{      // 是定义了一个抽象类        publicstatic final String FLAG = "CHINA"...

浅谈抽象与接口(含工厂、适配器、代理模式应用)

抽象类和接口抽象类 abstract class A{      // 是定义了一个抽象类        publicstatic final String FLAG = "CHINA&q...

浅谈适配器模式

先来介绍一下适配器模式的定义吧 适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 不懂没关系,接下来详细介绍 主要解决...

浅谈设计模式之适配器模式

适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用...

浅谈设计模式——适配器模式

在工作的时候,有时候我们并不知道系统提供的对外接口会被那些系统使用。如果这个对外接口只被一个外部系统使用,问题不大,可能要提供的方法还不是很多;如果这个外部接口要被很多的外部系统使用,问题就来了,如果...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)