Java经典设计模式-结构型模式-适配器模式(Adapter)

适配器模式

适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。java

适配器模式将某个类的接口转换成客户端指望的另外一个接口表示,目的是消除因为接口不匹配所形成的类的兼容性问题。有点抽象,咱们来看看详细的内容。app

1.一、类的适配器模式ide

类的适配器模式核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口是Targetable,经过Adapter类,将Source的功能扩展到Targetable里。this

package com.model.structure;
 
public class Source {
    public void method1() {  
        System.out.println("this is original method!");  
    }  
}
package com.model.structure;
 
public interface Targetable {
    /* 与原类中的方法相同 */
    public void method1();
 
    /* 新类的方法 */
    public void method2();
}
package com.model.structure;
 
public class Adapter extends Source implements Targetable {
    public void method2() {
        System.out.println("this is the targetable method!");
    }
}
package com.model.structure;
 
public class AdapterTest {
    public static void main(String[] args) {
        Targetable target = new Adapter();
        target.method1();
        target.method2();
    }
}

AdapterTest的运行结果:spa

1.二、对象的适配器模式code

对象的适配器模式的基本思路和类的适配器模式相同,只是将Adapter类做修改为Wrapper,此次不继承Source类,而是持有Source类的实例,以达到解决兼容性的问题。对象

package com.model.structure;
 
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();
    }
}
package com.model.structure;
 
public class AdapterTest {
    public static void main(String[] args) {
        Source source = new Source();
        Targetable target = new Wrapper(source);
        target.method1();
        target.method2();
    }
}

运行结果跟类的适配器模式例子的同样。继承

1.三、接口的适配器模式接口

接口的适配器是这样的:有时咱们写的一个接口中有多个抽象方法,当咱们写该接口的实现类时,必须实现该接口的全部方法,这明显有时比较浪费,由于并非全部的方法都是咱们须要的,有时只须要某一些,此处为了解决这个问题,咱们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了全部的方法,而咱们不和原始的接口打交道,只和该抽象类取得联系,因此咱们写一个类,继承该抽象类,重写咱们须要的方法就好了。get

这里看文字描述已经试够清楚的了,所以就不贴代码实例了。

相关文章
相关标签/搜索