zoukankan      html  css  js  c++  java
  • java设计模式-适配器模式

    概念:

      适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。

    分类:

    1 类适配器

    2 对象适配器

    3 接口适配器

    一  类适配器:

        通过继承来实现适配器功能,

    当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后再继承接口B的实现类BB,这样我们可以在适配器P中访问接口B的方法了,这时我们在适配器P中的接口A方法中直接引用BB中的合适方法,这样就完成了一个简单的类适配器。

      详见下方实例:我们以apple与android的充电线转接为例,让安卓充电线可以给苹果手机充电

    安卓接口

    //安卓接口
    public interface Android
    { 
        void isAndroid(); 
    }

    苹果接口

    //苹果接口
    public interface Apple
    {
        void isApple();
    }

    苹果接口实现类

    //苹果接口实现类
    public class ApplerUser implements Apple
    { 
        //实现苹果接口
        void isApple()
        {
            System.out.println("我可以给苹果手机充电")
        }
    }

    //适配器

    //适配器
    public class Adapter extends ApplerUser implements Android
    {
        void isAndroid();
        {
               this.isApple();
        }
    }

    测试类

    public class Test
    {
        public static void main(String args[])
        {
            Android android = new Adapter ();
            android.isAndroid();
        }
    }

    输出结果:我可以给苹果手机充电

    适配器Adapter的作用就是,把安卓充电线转换为具有苹果充电线功能(可以给苹果手机充电)

    二  对象适配器

    原理:通过组合来实现适配器功能。

    当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后在适配器P中定义私有变量C(对象)(B接口指向变量名),再定义一个带参数的构造器用来为对象C赋值,再在A接口的方法实现中使用对象C调用其来源于B接口的方法,

    详见下方实例:我们以apple与android的充电线转接为例,让安卓充电线可以给苹果手机充电

    安卓接口

    //安卓接口
    public interface Android
    { 
        void isAndroid(); 
    }

    苹果接口

    //苹果接口
    public interface Apple
    {
        void isApple();
    }

    苹果接口实现类

    //苹果具体实现类
    public class ApplerUser implements Apple
    { 
        //实现苹果接口
        void isApple()
        {
            System.out.println("我可以给苹果手机充电")
        }
    }

    //对象适配器

    //对象适配器
    public class Adapter  implements Android
    {
        //苹果接口对象
        private Apple apple;
    
        public Adapter(Apple apple)
        {
             this.apple = apple;
        }
       
       //实现安卓接口
        void isAndroid();
        {
            this.apple.isApple();
        }
    }

    测试类

    public class Test
    {
        public static void main(String args[])
        {
            Android android = new Adapter (new Apple());
            android .isAndroid();
        }
    }

    输出结果:我可以给苹果手机充电

    适配器Adapter的作用就是,把安卓充电线转换为具有苹果充电线功能(可以给苹果手机充电)

    三  接口适配器模式

    原理:通过抽象类来实现适配,这种适配稍别于上面所述的适配

    当存在这样一个接口,其中定义了N多的方法,而我们现在却只想使用其中的一个到几个方法,如果我们直接实现接口,那么我们要对所有的方法进行实现,哪怕我们仅仅是对不需要的方法进行置空(只写一对大括号,不做具体方法实现)也会导致这个类变得臃肿,调用也不方便,这时我们可以使用一个抽象类作为中间件,即适配器,用这个抽象类实现接口,而在抽象类中所有的方法都进行置空,那么我们在创建抽象类的继承类,而且重写我们需要使用的那几个方法即可

    //拥有一些列方法的接口

    public interface A
    {
        void  a();
        void b();
        void c();
        void d();
    }

    //适配器

    //适配器
    public abstract class Adapter implements A
    {
        void  a(){}
        void b(){}
        void c(){}
        void d(){}
    }

    //实现类(因为实际需要,只需要实现a,b 方法就能满足业务要求)

    //实现类
    public class  Shixian extends Adapter 
    {
        void a()
        {
           system.out.println("实现a方法");
        }
    
        void b()
        {
           system.out.println("实现b方法");
        }
    }

    //测试类

    public class Test
    {
        public static void main(String args[])
        {
             A  a = new Shixian ();
             a.a();
             a.b();
        }
    }

    //输出

    实现a方法

    实现b方法

    四 适配器模式应用场景

    类适配器与对象适配器的使用场景一致,仅仅是实现手段稍有区别,二者主要用于如下场景:

      (1)想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直接去访问,这时创建一个适配器就能间接去访问这个类中的方法。

      (2)我们有一个类,想将其设计为可重用的类(可被多处访问),我们可以创建适配器来将这个类来适配其他没有提供合适接口的类。

      以上两个场景其实就是从两个角度来描述一类问题,那就是要访问的方法不在合适的接口里,一个从接口出发(被访问),一个从访问出发(主动访问)。

    接口适配器使用场景:

      (1)想要使用接口中的某个或某些方法,但是接口中有太多方法,我们要使用时必须实现接口并实现其中的所有方法,可以使用抽象类来实现接口,并不对方法进行实现(仅置空),然后我们再继承这个抽象类来通过重写想用的方法的方式来实现。这个抽象类就是适配器。

  • 相关阅读:
    【转】eclipse修改workspace
    win7+64位+Oracle+11g+64位下使用P…
    Oracle 11g R2安装手册(…
    Maven 3 入门 -- 安装与配置
    JSP+JavaBean+Servlet工作原理实例…
    欢迎您在新浪博客安家
    win7中配置eclipse连接Ubuntu内的hadoop
    Visual Studio 2010 单元测试目录
    spring 面试题
    java集合类
  • 原文地址:https://www.cnblogs.com/hup666/p/10473652.html
Copyright © 2011-2022 走看看