目录
二、适配器模式
概念
- 适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用
- 当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对客户类是透明的,客户类并不直接访问适配者类
- 适配器可以使由于接口不兼容而不能交互的类可以一起工作
两种模式(类继承,对象调用)
类适配器模式:在图3.19中,假如要使用类Adaptee中的方法Operation1,同时也要使用另外一个方法Operation2,而Operation2没有在类Adaptee中,怎样解决该问题呢?
方案:用一个Target接口声明所有需要的方法,并且用另外一个Adapter类实现Target接口中所有的方法。同时,Adapter类继承Adaptee类,如果3.20所示。
对象适配器模式:在Java语言中不允许有多继承,所以,如果同时有两个或者两个以上的类Adaptee1、Adaptee2需要被适配,则不能够继续使用类适配器模式进行设计,图3.22所示的合计图是不合法的。
实例一:客户信息验证
实例二:字符串排序
关于适配器模式的讨论
1. 适配器的作用
-
适配器模式是将接口不同而功能相近的两个接口加以转换,包括适配器角色补充一些源角色没有但目标接口需要的方法。
-
适配器模式可以用于增加新的方法,但主要意图是转换接口
2. 类适配器模式与对象适配器模式的区别
(本质上没什么区别,只是在实现上的区别,比如Java不能多继承,所以用对象适配器模式)
优缺点
优点:
- 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,而无须修改原有代码。
- 增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性。
- 灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。
类适配器模式
类适配器模式还具有如下优点:
由于适配器类是适配者类的子类,因此可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。
缺点:
有的语言不支持多继承,其使用有一定的局限性
对象适配器模式
对象适配器模式还具有如下优点:
一个对象适配器可以把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。
缺点:
与类适配器模式相比,要想置换适配者类的方法就不容易。
适用环境
- 系统需要使用现有的类,而这些类的接口不符合系统的需要。
- 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
适配器模式的扩展
默认适配器模式
默认适配器模式(Default Adapter Pattern)或缺省适配器模式
- 当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),
- 那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求,它适用于一个接口不想使用其所有的方法的情况。
- 因此也称为单接口适配器模式。
双向适配器
在对象适配器的使用过程中,如果在适配器中同时包含对目标类和适配者类的引用,适配者可以通过它调用目标类中的方法,目标类也可以通过它调用适配者类中的方法,那么该适配器就是一个双向适配器。
课程作业
1、Java是单继承语言,不支持多继承
2、