博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
适配器模式(对象适配器)
阅读量:6084 次
发布时间:2019-06-20

本文共 2104 字,大约阅读时间需要 7 分钟。

hot3.png

fcf7ab48a261a0938a4f0877fed4a0577f6.jpg

对象适配器的“组合”比类适配器的“继承” 更加灵活。

定义:

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适配器模式最经典的应用应该就是android中的ListView,GridView了。

举个栗子:

假如你是android framework的开发工程师,要设计一个ListView组件来展示数据,数据源的类已经定义好了而且不能被改动(开闭原则,比如String[],ArrayList,Cursor(这些都是adaptee,被适配者)等,但是这三个数据源(ITarget)的访问数据接口并不是统一的,要想获取数据源的长度,String数组是length属性,ArrayList是size(),Cursor是getCount();所以我这么这个时候需要抽象出来一个适配器。(ArrayAdapter,ListAdapter,CursorAdapter)

首先定义ListView需要的接口.

public interface IAdapter
{ int getCount() ; T getItem(int pos); long getItemId(int pos) ;}

把ArrayList转为ListView需要的接口

 

public class ListAdapter
implements IAdapter { private List
data;//ITarget ListAdapter(List
data){ this.data = data; } public int getCount() { return data.size(); } public T getItem(int pos) { return data.get(pos); } public long getItemId(int pos) { return pos; }}

 

String[] 转为ListView需要的接口(不一定是String,可以是任意对象的数组)

public class ArrayAdapter
implements IAdapter { private T[] data; ArrayAdapter(T[] data){ this.data = data; } public int getCount() { return 0; } public Object getItem(int pos) { return null; } public long getItemId(int pos) { return 0; }}

使用者适配器的代码

 

public class ListView {    private IAdapter baseAdapter;    public void setAdapter(IAdapter baseAdapter){        this.baseAdapter = baseAdapter;    }    public void inflateView() {        int count = baseAdapter.getCount();        Object object = baseAdapter.getItem(0);    }}

 

ListView listView = new ListView();List
list = new ArrayList();listView.setAdapter(new ListAdapter(list));listView.inflateView();//省略使用ArrayAdapter,CursorAdapter代码

 

如果是类适配器代码怎么实现?

public class ListAdapter
extends List
implements IAdapter { ListAdapter(){ } public int getCount() { //调用父类的size() return super.size(); } public T getItem(int pos) { return super.get(pos); }}

 

转载于:https://my.oschina.net/u/4129361/blog/3051024

你可能感兴趣的文章
Windows Phone 7开发一月谈(10)
查看>>
jquery之index()
查看>>
vmware:Cannot open the disk 'XXX' or one of the snapshot disks it depends on.
查看>>
Galgames Hgames下载中心,无毒
查看>>
SGE中将指定的job挂起
查看>>
我的友情链接
查看>>
Nagios3.2.0在CentOS5.3上安装和配置
查看>>
软件包管理 之 如何编译安装源码包软件
查看>>
ios 图片自适应屏幕 截取
查看>>
函数的重载
查看>>
提升JavaScript的加载与执行效率
查看>>
js遍历
查看>>
简明 Python 教程
查看>>
在mac下启动postgresql
查看>>
家人北京游
查看>>
EJBCA 6 配置使用
查看>>
Nagios自定义报警时间
查看>>
有过故事的那些人
查看>>
Java中的锁详解
查看>>
Java实现单链表_使用链式存储结构
查看>>