zoukankan      html  css  js  c++  java
  • 二十三种设计模式之:适配器模式

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

    1.类的适配器模式

    实现思想是:有一个类Source,拥有一个方法method1,待适配;目标接口是Targetable,通过Adapter类,将Source类的功能扩展到Targetable中,具体代码如下:

    public class Source{

      public void method1(){

        System.out.println("This is Source's method1");

      }

    }

    public interface Targetable{

      public void method1();

      public void method2();

    }

    public class Adapter extends Source implements Targetable{

      public void method1(){

        System.out.println("This is Adapter's method1");

      }

      @Override

      public void method2(){

        System.out.println("This is Adapter's method2");

      }

    }

    测试类:

    public class AdapterTest{

      public static void main(String [] args){

        Targetable targetable = new Adapter();

        targetable.method1();

        targetable.method2();

      }

    }

    2.对象的适配器模式

    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 Targetable's method2");

      }

      @Override

      public void method1(){

        source.method1();

      }

    }

    测试类:

    public class AdapterTest{

      public static void main(String [] args){

        Source source = new Source();

        Targetable wrapper = new Wrapper(source);

        wrapper.method1();

        wrapper.method2();

      }

    }

    3.接口的适配器模式

    UML图如下:

    接口的适配器模式的原理是:通过抽象类Wrapper实现Sourceable接口的方法,然后其他的类可以通过抽象类Wrapper来选择性的实现接口的方法。

    代码如下:

    public Interface Sourceable(){

      public void method1();

      public void method2();

    }

    public abstract class Wrapper implements Sourceable{

      @Override

      public void method1(){}

      @Override

      public void method2(){}

    }

    public class SourceSub1 extends Wrapper{

      public void method1(){

        System.out.println("This is the Interface's first Sub1!");

      }

      public void method2(){

        System.out.println("This is the Interface's seconds Sub2!");

      }

    }

    main方法:

    public class Wrapper{

      public static void main(String [] args){

        Sourceable sourceSub1 = new SourceSub1();

        sourceable sourceSub2 = new SourceSub2();

        sourceSub1.method1();

        sourceSub1.method2();

        sourceSub2.method1();

        sourceSub2.method2();

      }

    }

  • 相关阅读:
    unity3D相机缓慢看向目标物体
    设计原则
    unity3D中GUI标题内文字滚动效果
    python3.6中安装PyQt报错
    codeforces 515B.Drazil and His Happy Friends
    HDU 1029 Ignatius and the Princess IV
    POJ 1052 Plato's Blocks
    Uva220 Othello
    uva201 Squares
    uva1587 Box
  • 原文地址:https://www.cnblogs.com/qadyyj/p/5645963.html
Copyright © 2011-2022 走看看