一.引言:
类适配器与对象适配器的使用场景一致,仅仅是实现手段稍有区别,二者主要用于如下场景:
(1)想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直接去访问,这时创建一个适配器就能间接去访问这个类中的方法。
(2)我们有一个类,想将其设计为可重用的类(可被多处访问),我们可以创建适配器来将这个类来适配其他没有提供合适接口的类。
以上两个场景其实就是从两个角度来描述一类问题,那就是要访问的方法不在合适的接口里,一个从接口出发(被访问),一个从访问出发(主动访问)。
接口适配器使用场景:
(1)想要使用接口中的某个或某些方法,但是接口中有太多方法,我们要使用时必须实现接口并实现其中的所有方法,可以使用抽象类来实现接口,并不对方法进行实现(仅置空),然后我们再继承这个抽象类来通过重写想用的方法的方式来实现。这个抽象类就是适配器。
二.代码实践:
1.随意的创建两个接口,并声明不同的方法
/**
* Created by ${ligh} on 2018/12/17 下午8:15
*/
public interface TwoHoleSocket {
public void sayTwoHello();
}
/**
* Created by ${ligh} on 2018/12/17 下午8:15
*/
public interface ThreeHoleSocket {
public void sayThreeHello();
}
2.目的是能通过Two接口调用Three中的方法,因此创建一个类实现Three接口:
如何将一个接口转换为另一个接口?
答案是采用适配器模式。适配器就是一个接口转换器,在生活中无处不在,我们最常见的就是电源适配器了,它可以在两孔插座和三孔插座之间起到转换的作用。虽然用户看见的是两孔插座,但是经过适配器的转换后,实际为用户提供服务的是三孔插座。
/**
* Created by ${ligh} on 2018/12/17 下午8:17
*/
public class BullThree implements ThreeHoleSocket{
@Override
public void sayThreeHello() {
System.out.println("Using three holes ... ");
}
}
3.创建Two的适配器类:
/**
* Created by ${ligh} on 2018/12/17 下午8:16
*/
public class TwoToThreeAdapter implements TwoHoleSocket{
ThreeHoleSocket threeHoleSocket;
public TwoToThreeAdapter() {
//构造方法中创建ThreeHoleSocket,以及其实现类
threeHoleSocket = new BullThree();
}
@Override
public void sayTwoHello() {
//真正掉方法的是Three调用的
threeHoleSocket.sayThreeHello();
}
}
4.测试:
public class User {
public static void main(String[] args) {
TwoToThreeAdapter twoToThreeAdapter = new TwoToThreeAdapter();
twoToThreeAdapter.sayTwoHello();
}
}
打印结果:
以上就是简单的适配器模式…