适配器模式:将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。
适配器模式原理很简单:extends,implement。
举个例子
类的适配器模式
,直接上代码
package ExtendsAndImplement;
/**
* 父类
*
* @author zhaoxiao
*
*/
public class Parent {
public int getInitNumber() {
return 3;
}
}
package ExtendsAndImplement;
public class SuperClass extends Parent implements Number {
@Override
public int getNumberTwo() {
// TODO Auto-generated method stub
return 0;
}
}
package ExtendsAndImplement;
/**
* Number接口
*
* @author zhaoxiao
*
*/
public interface Number {
/**
* 第一个方法
*
* @return
*/
int getInitNumber();
/**
* 第二个方法
*
* @return
*/
int getNumberTwo();
}
package ExtendsAndImplement;
/**
* 测试方法
*
* @author zhaoxiao
*
*/
public class Test {
public static void main(String[] args) {
Number p = new SuperClass();
System.out.println(p.getInitNumber());
}
}
相信小伙伴们也看得差不多了,对象p即有了父类Number的功能,又有了接口SuperClass的功能。
对象的适配器
只需要修改SuperClass类就行:
package ExtendsAndImplement;
public class SuperClass implements Number {
private Parent p;
public SuperClass(Parent p) {
super();
this.p = p;
}
@Override
public int getNumberTwo() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getInitNumber() {
// TODO Auto-generated method stub
return p.getInitNumber();
}
}
测试类
package ExtendsAndImplement;
/**
* 测试方法
*
* @author zhaoxiao
*
*/
public class Test {
public static void main(String[] args) {
Parent p=new Parent();
Number n = new SuperClass(p);
n.getInitNumber();
n.getNumberTwo();
}
}
接口适配器模式
讲这个模式之前,先来回顾下 abstract 和 interface 的区别:
interface 是 abstract 的一种特殊形式,interface 不能继承 abstract ,同样 abstract 也不能继承 interface,但是 abstract 可以 implement interface 如果没有实现interface的方法体的话,就相当与 interface 继承 interface ,也就是扩展 interface ,当然实现另说, 再来看接口适配器模式,
package MyAbstract;
public interface Sourceable {
public int method1();
public int method2();
}
package MyAbstract;
public abstract class Parent implements Sourceable {
public int method1() {
return 1;
}
public int method2() {
return 1;
}
}
package MyAbstract;
public class ExtendsTestA extends Parent {
@Override
public int method1() {
// TODO Auto-generated method stub
return 0;
}
}
package MyAbstract;
public class ExtendsTestB extends Parent {
@Override
public int method2() {
// TODO Auto-generated method stub
return 0;
}
}
测试类
package MyAbstract;
public class Test {
public static void main(String[] args) {
Sourceable source1 = new ExtendsTestA();
Sourceable source2 = new ExtendsTestB();
source1.method1();
source1.method2();
source2.method1();
source2.method2();
}
}
总结:三种适配器模式相互比较学习,掌握原理,利用继承,接口,这些都是基础,相信小伙伴们也掌握的差不多了,相互学习,相互进步。