适配器设计模式

原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6479118.html

  适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。

  适配器模式有两种:类适配器、对象适配器、接口适配器

  前二者在实现上有些许区别,作用一样,第三个接口适配器差别较大。

 

1、类适配器模式:

  原理:通过继承来实现适配器功能。

  当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后再继承接口B的实现类BB,这样我们可以在适配器P中访问接口B的方法了,这时我们在适配器P中的接口A方法中直接引用BB中的合适方法,这样就完成了一个简单的类适配器。

  详见下方实例:我们以ps2与usb的转接为例

ps2接口:Ps2

package DesignMode.adapter;

/**
 * @Author: wj
 * @Date: 2018/12/10 9:47
 * @Version 1.0
 */
public interface Ps2 {
    void isPs2();
}

USB接口:Usb

package DesignMode.adapter;

/**
 * @Author: wj
 * @Date: 2018/12/10 9:47
 * @Version 1.0
 */
public interface Usb {
    void isUsb();
}

USB接口实现类:Usber

package DesignMode.adapter;

/**
 * @Author: wj
 * @Date: 2018/12/10 9:48
 * @Version 1.0
 */
public class Usber implements Usb {
    public void isUsb() {
        System.out.println("this is Usb ");
    }
}

适配器:Adapter

package DesignMode.adapter.plan1;

import DesignMode.adapter.Ps2;
import DesignMode.adapter.Usber;

/**
 * @Author: wj
 * @Date: 2018/12/10 9:49
 * @Version 1.0
 */
public class Adapter1 extends Usber implements Ps2 {
    public void isPs2() {
        isUsb();
    }
}

测试方法:Main:

package DesignMode.adapter;

import DesignMode.adapter.plan1.Adapter1;

/**
 * @Author: wj
 * @Date: 2018/12/10 9:51
 * @Version 1.0
 */
public class Main {

    public static void main(String[] args) {
        Ps2 ps2 = new Adapter1();
        ps2.isPs2();
    }

}

输出:

 

实例讲解:

  我手中有个ps2插头的设备,但是主机上只有usb插头的插口,怎么办呢?弄个转换器,将ps2插头转换成为USB插头就可以使用了。

  接口Ps2:描述ps2接口格式

  接口Usb:描述USB接口格式

  类Usber:是接口Usb的实现类,是具体的USB接口格式

  Adapter:用于将ps2接口格式转换成为USB接口格式

 

 

 

2、对象适配器模式

  原理:通过组合来实现适配器功能。

  当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后在适配器P中定义私有变量C(对象)(B接口指向变量名),再定义一个带参数的构造器用来为对象C赋值,再在A接口的方法实现中使用对象C调用其来源于B接口的方法。

  详见下方实例:我们仍然以ps2与usb的转接为例

 

适配器:Adapter

package DesignMode.adapter.plan1;

import DesignMode.adapter.Ps2;
import DesignMode.adapter.Usb;

/**
 * @Author: wj
 * @Date: 2018/12/10 9:56
 * @Version 1.0
 */
public class Adapter2 implements Ps2 {
    private Usb usb;


    public Adapter2(Usb usb){
        this.usb = usb;
    }

    public void isPs2() {

        usb.isUsb();
    }
}

实现:Main

package DesignMode.adapter;

import DesignMode.adapter.plan1.Adapter2;

/**
 * @Author: wj
 * @Date: 2018/12/10 9:51
 * @Version 1.0
 */
public class Main {

    public static void main(String[] args) {
//        Ps2 ps2 = new Adapter1();
//        ps2.isPs2();



        Ps2 ps2 = new Adapter2(new Usber());
        ps2.isPs2();

    }

}

实例讲解:

  我手中有个ps2插头的设备,但是主机上只有usb插头的插口,怎么办呢?弄个转换器,将ps2插头转换成为USB插头就可以使用了。

  接口Ps2:描述ps2接口格式

  接口Usb:描述USB接口格式

  类Usber:是接口Usb的实现类,是具体的USB接口格式

  Adapter:用于将ps2接口格式转换成为USB接口格式

 

3、接口适配器模式

  原理:通过抽象类来实现适配,这种适配稍别于上面所述的适配。

  当存在这样一个接口,其中定义了N多的方法,而我们现在却只想使用其中的一个到几个方法,如果我们直接实现接口,那么我们要对所有的方法进行实现,哪怕我们仅仅是对不需要的方法进行置空(只写一对大括号,不做具体方法实现)也会导致这个类变得臃肿,调用也不方便,这时我们可以使用一个抽象类作为中间件,即适配器,用这个抽象类实现接口,而在抽象类中所有的方法都进行置空,那么我们在创建抽象类的继承类,而且重写我们需要使用的那几个方法即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值