适配器模式
概念: 适配器模式是将某个类的接口换成客户端期望的另一个接口表示,目的是消除由于接口不匹配而导致的兼容性的问题.
1、类的适配器模式
1.1 源类
public class Source {
public void method1(){
System.out.println("This is original method.");
}
}
1.2 要实现的接口
public interface Targetable {
// 与源类中的方法相同
public void method1();
// 新类的方法
public void method2();
}
1.3 类Adapter继承于类Source,实现Targetable接口
public class Adapter extends Source implements Targetable{
public void method2(){
System.out.println("This is the targetable method.");
}
}
1.4 主测试函数的实现
public class AdapterTest {
public static void main(String[] args){
Targetable target = new Adapter();
target.method1();
target.method2();
}
}
1.5 结果展示:
2、对象的适配器模式
2.1 源
public class Source {
public void method1(){
System.out.println("This is original method.");
}
}
2.2 要实现的接口
public interface Targetable {
// 与源类中的方法相同
public void method1();
// 新类的方法
public void method2();
}
2.3 Wrapper实现接口Targetable
public class Wrapper implements Targetable{
private Source source;
public Wrapper(Source source){
super();
this.source = source;
}
@Override
public void method2(){
System.out.println("This is the targetable method.");
}
@Override
public void method1(){
source.method1();
}
}
2.4主测试函数
public class AdapterTest {
public static void main(String[] args){
Source source = new Source();
Targetable target = new Wrapper(source);
target.method1();
target.method2();
}
}
2.5 结果展示
3、接口的适配器
3.1 创建一个接口
public interface Sourceable {
// 定义两个方法
public void method1();
public void method2();
}
3.2 用虚方法创建这个接口的实现
public abstract class Wrapper2 implements Sourceable{
// 实现Sourceable中的方法
public void method1(){}
public void method2(){}
}
3.3 利用类的继承重写虚方法
public class SourceSub1 extends Wrapper2{
public void method1(){
System.out.println("The sourceable interface's first sub1.");
}
}
public class SourceSub2 extends Wrapper2{
public void method2(){
System.out.println("The sourceable interface's second sub2.");
}
}
3.4 主测试函数
public class AdapterTest {
public static void main(String[] args){
Sourceable source1 = new SourceSub1();
Sourceable source2 = new SourceSub2();
// 只有1和4的结果打印出来
System.out.println(1);
source1.method1();
System.out.println(2);
source1.method2();
System.out.println(3);
source2.method1();
System.out.println(4);
source2.method2();
}
}
3.5 结果展示
类的适配器模式: 若希望将一个类转换成满足另一个接口的类时,可以使用类的适配器模式,创建一个类,继承原有的新类,继承原有的类,实现新的接口即可.
对象的适配器模式: 当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例, 在Wrapper类的方法中,调用实例的方法就行.
接口的适配器模式: 当不希望实现一个接口中的所有方法时,可以创建一个抽象类Wrapper, 实现所有方法,我们写别的类时候,抽象继承类即可.