5.0适配器模式

简介

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。读卡器,转接头等都可看成适配器模式在生活中的应用。

1:Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类。

2:Adapter(适配器类):它可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。它是适配器模式的核心。3:Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类包好了客户希望的业务方法。


应用实例

1、美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。2、JAVA JDK 1.1 提供了 Enumeration 接口,而在 1.2 中提供了 Iterator 接口,想要使用 1.2 的 JDK,则要将以前系统的 Enumeration 接口转化为 Iterator 接口,这时就需要适配器模式。3、在 LINUX 上运行 WINDOWS 程序。4、JAVA 中的 jdbc。

类图



代码

/**  
 * 目标抽象类(Target),要转换成的目标接口
 * @author: 张彬
 * @date: 2018年5月15日 下午4:32:35
 * @version: V1.0
 * @review: 张彬/2018年5月15日 下午4:32:35
 */
public interface America {
   public void power110();

}
/**  
 * Adaptee(适配者类),需要被转换的源接口
 * @author: 张彬
 * @date: 2018年5月15日 下午4:34:05
 * @version: V1.0
 * @review: 张彬/2018年5月15日 下午4:34:05
 */
public class China {
    public void power220() {
        System.out.println("power220");
    }
}
/**  
 * 对象适配,核心是实现Target接口, 组合Adaptee接口
 * @author: 张彬 
 * @date: 2018年5月15日 下午4:36:25
 * @version: V1.0
 * @review: 张彬/2018年5月15日 下午4:36:25
 */
public class ObjectAdapter implements America { 
    private China china; 
    public ObjectAdapter(China china) { 
        this.china = china; 
    }
    @Override
    public void power110() {
        china.power220();
    }
}
/**  
 * 类适配器,核心是继承Adaptee类,实现Target接口 
 * @author: 张彬
 * @date: 2018年5月15日 下午4:40:45
 * @version: V1.0
 * @review: 张彬/2018年5月15日 下午4:40:45
 */
public class ClassAdapter extends China implements America { 
    @Override
    public void power110() {
        this.power220();
    }
}
/**  
 * 客户端
 * @author: 张彬
 * @date: 2018年5月15日 下午4:49:29
 * @version: V1.0
 * @review: 张彬/2018年5月15日 下午4:49:29
 */
public class Client {
    public static void main(String[] args) {
        //对象适配
        America objectAdapter = new ObjectAdapter(new China());
        objectAdapter.power110();
        System.out.println("--------------------");
        //类适配
        America classAdapter = new ClassAdapter();
        classAdapter.power110();
        
    }
}

输出结果:

power220
--------------------
power220

总结

优点

  • 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,而无须修改原有代码。
  • 增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性。
  • 灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。
  • 类适配器-由于适配器类是适配者类的子类,因此可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。
  • 对象适配器-可以把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。

缺点

  • 类适配器模式的缺点是适配器类在很多编程语言中不能同时适配多个适配者类;
  • 对象适配器模式的缺点是很难置换适配者类的方法
PS:接口适配器

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











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值