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();

      }

    }

  • 相关阅读:
    九度OJ 1136:Number Steps(步数) (基础题)
    九度OJ 1135:字符串排序 (排序)
    九度OJ 1134:密码翻译 (翻译)
    day 2克隆虚拟机器minimal需要注意的问题和制作本地yum源和常用的Linux的命令
    ssh 免 密码登录另一台机器 和 secureCRT的乱码问题
    Select2 用法
    JS常用功能
    虚拟机CentOS的NAT模式联网和SecureCRT远程登录管理工具
    2.网络配置和shell获取ip
    1.安装虚拟机遇到到问题和内存拓展
  • 原文地址:https://www.cnblogs.com/qadyyj/p/5645963.html
Copyright © 2011-2022 走看看