适配器模式(Adapter)-----基于JAVA语言

来源:互联网 发布:毛利率的算法 编辑:程序博客网 时间:2024/06/14 15:42

适配器模式(Adapter)

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。


类的适配器模式:

   核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口是Targetable,通过Adapter类,将Source的功能扩展到Targetable里
例子:
    public class Source {          public void method1() {              System.out.println("this is original method!");          }      }    public interface Targetable {          /* 与原类中的方法相同 */          public void method1();          /* 新的方法 */          public void method2();      }      //类Source和接口Targetable因为不兼容,导致不能在一起工作    //适配器Adapter则可以在不改变源代码的基础上解决这个问题    //这样Targetable接口的实现类Adapter的对象即使Targetable类型,也能访问到Source中的方法    public class Adapter extends Source implements Targetable {          public void method2() {              System.out.println("this is the targetable method!");          }      }    //测试类  这样Targetable接口的实现类就具有了Source类的功能。    public class AdapterTest {          public static void main(String[] args) {              Targetable target = new Adapter();              target.method1();              target.method2();          }      }  

对象的适配器模式:

基本思路和类的适配器模式相同,只是将Adapter类作修改,这次不继承Source类,而是持有Source类的实例,以达到解决兼容性的问题
    例子:

public class Source {    public void method1() {        System.out.println("this is Source method!");    }}public interface Targetable {    public void method1();    public void method2();}public class Adapter implements Targetable{    private Source source;    public Adapter(Source source) {        this.source = source;    }    @Override    public void method1() {        source.method1();    }    @Override    public void method2() {        System.out.println("this is the targetable method!");      }    }public class Test {    public static void main(String[] args) {        Source source = new Source();        Targetable target = new Adapter(source);        target.method1();        target.method2();    }}

接口的适配器模式
    接口的适配器是这样的:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。
    public interface Sourceable {    public void method1();    public void method2();}public abstract  class Adapter implements Sourceable {    public void method1() {}    public void method2() {}}public class Test {    public static void main(String[] args) {        Sourceable source = new Sourceable() {                        @Override            public void method2() {                // TODO Auto-generated method stub                            }                        @Override            public void method1() {                // TODO Auto-generated method stub                            }        };        Sourceable source2 = new Adapter() {            @Override            public void method1() {                // TODO Auto-generated method stub                super.method1();            }        };    }}

3中模式充分的体现了适配器模式的作用,