zoukankan      html  css  js  c++  java
  • 适配器模式 在Android中的简单理解

    Android

    在Android上提到适配器模式就会想到最常用的ListView和BaseAdapter

    在这个功能的使用中,类似于适配器模式的对象适配器

    例如在ListView中想用一个getView()方法,但是不同的数据,不同的需求,会有不同的getView()结果,所以getView()不能写死了,那么可能就想到了用适配器模式

    所以ListView里面包含了一个ListAdapter的成员变量,实际上是ListView继承了AbsListView,ListAdapter变量是在AbsListView中声明的

    然后BaseAdapter是实现了ListAdapter的,那么我们自定义的***Adapter继承了BaseAdapter,其实也就相当于间接实现了ListAdapter,并且***Adapter会具体去实现getView()方法

    那么ListView就可以通过调用setAdapter(ListAdapter adapter)方法,将***Adapter传进去,从而实现了我们想要的结果

    Java

    适配器模式有两种:

    1. 类适配器
    2. 对象适配器

    场景:

    假如A类想用M方法,X类有M方法,但是M方法的结果不一定完全符合A类的需求

    那么X类就是写死了,不好用,这样设计不好

    那就把X类换成一个接口,弄出一些B,C,D,E.....类中间类出来,让他们都有一个方法来处理M方法的东西,再给A类用

    类适配器:

    设计一个接口I,让他也有M方法

    然后设计一个B类,写好符合A类需求的specialM方法

    然后让A类继承B类,并实现I接口的M方法

    最后在A类的M方法中以super的方式调用B类的specialM方法

    对象适配器:(更多是用对象适配器)

    设计一个接口I,让他也有M方法

    然后设计一个B类,写好符合A类需求的specialM方法

    然后在A类中声明一个B类变量,并且A类实现I接口,那么A类也就有了M方法

    最后在A类的M方法中,如果需要,就可以选择调用B类的specialM方法

    或者设计一个B类,实现I接口的M方法

    然后在A类中声明一个I类变量,再直接调用I接口的M方法

    在调用A类的M方法之前,通过例如setAdapter(I Adapter)这样的方法,将B类设置成A类的成员变量

    这样就保证了A类和I接口不变,适配不同情况的时候,写一个类似B类的中间类进行适配就可以了

    总之,两端不变,通过不同的选择方式,选择不同的中间类,也就是适配器模式了

    适配器模式参考链接

  • 相关阅读:
    智能移动机器人背后蕴含的技术——激光雷达
    Kalman Filters
    Fiddler抓HttpClient的包
    VSCode开发WebApi EFCore的坑
    WPF之小米Logo超圆角的实现
    windows react打包发布
    jenkins in docker踩坑汇总
    Using ML.NET in Jupyter notebooks 在jupyter notebook中使用ML.NET ——No design time or full build available
    【Linux知识点】CentOS7 更换阿里云源
    【Golang 报错】exec gcc executable file not found in %PATH%
  • 原文地址:https://www.cnblogs.com/imeiling/p/6394738.html
Copyright © 2011-2022 走看看