什么是适配器模式
1.概念
将某个类的接⼝口转换成客户端期望的另⼀一个接⼝口表示,⽬目的是消除由于接⼝口不不匹配所造成的类的兼容性问题。
2.示例
- 生活中的适配器:如电脑的各种适配器,充电头等
- 软件中:做项目的时候,需要单独设计/购买一个模块需要集成到项目中
实现适配器模式的方法
1.类的适配器模式
核心思想:有一个Source类,用一个方法,待适配,目标接口Targetable,通过Adapter类,将Source的功能扩展到Targetable里
public class Source(){
//需要适配的方法
public void method1(){
sout("this is original method");
}
}
public interface Targetable(){
//与原类中的方法一致
public void method1();
//需要适配的方法
public void method2();
}
public class Adapter() extends Source implements Targetable{
@Override
public void method2(){
sout("this is targetable method");
}
}
2.对象的适配器模式
修改上述的Adpater类即可
public class Wrapper implements Targetable{
private Source source;
public Wrapper(Source source){
this.source = source;
}
@Override
public void method1(){
source.method1();
}
@Override
public void method2(){
sout("this is targetable method");
}
}
3.接口的适配器模式
在实际开发中,有时我们接口中定义了太多的方法,以致于我们在实现类中不需要这么多,看代码
public interface Sourceable{
public void method1();
public void method2();
}
//抽象类Wrapper2
public abstract class Wrapper2 implements Sourceable{
public void method1(){}
public void method2(){}
}
public class Sourceable1 extends Wrapper2{
public void method1(){
sout("the Sourceable interface's first Sub1!");
}
}
public class Sourceable2 extends Wrapper2{
public void method2(){
sout("the Sourceable interface's first Sub2!");
}
}
使用场景
1.类的适配器模式
当希望一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
2.对象的适配器模式
当希望一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原有类的一个实例,在Wrapper类的方法中,调用实例的方法就行。
3.接口的适配器模式
当不希望实现一个接口中的所有方法时,可以创建一个抽象类Wrapper,实现所有的方法,我们写别的类时的时候,继承抽象类即可。
4.JavaSE中使用到适配器模式的场景
- java.io.InputStreamReader(InputStream)
- java.io.OutputStreamWriter(OutputStream)
总结
- 对象适配器和类适配器其实算是同一种思想,只不过实现方式不同。
- 对于旧系统的改造升级思想有很大的帮助
- 适配器模式是常用的模式之一,其主要意图就是做接口兼容:使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。比如甲乙两个接口,客户端想让乙接口做出甲接口的行为或者说让乙接口拥有甲接口同样的能力,那么乙接口就必须以某种手段适应甲接口制定的规则