博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式在android中的应用——适配器模式
阅读量:4212 次
发布时间:2019-05-26

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

原文地址:

适配器模式:
把一个类的接口转换为客户端所期待的另一种接口,从而使原本因接口不匹配而无法再一起工作的两个类能够在一起工作。
又称为:转化器模式、变压器模式或包装模式。
通俗的来说:
就像我们平常给笔记本用的充电器一样,不管外接电源是110V、220V还是360V,经过充电器的转化后,输出给笔记本的都是标准而稳定的12V电压。
如图:
Android API中的应用:
ListView与Adapter的应用就是典型的适配器模式。
如:

//----------------------------------------------------------------------------------------------声明组件           //绑定Layout里面的ListView          ListView list = (ListView) findViewById(R.id.ListView01);      //----------------------------------------------------------------------------------------------设置数据源              //生成动态数组,加入数据          ArrayList
> listItem = new ArrayList
>(); for(int i=0;i<10;i++) { HashMap
map = new HashMap
(); map.put("ItemImage", R.drawable.checked); map.put("ItemTitle", "Level "+i); listItem.add(map); } //----------------------------------------------------------------------------------------------导入数据源 //生成适配器的Item和动态数组对应的元素 SimpleAdapter adapter = new SimpleAdapter(this,listItem, R.layout.list_items,[size=1em] [size=1em] new String[] {"ItemImage","ItemTitle"}, new int[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText} ); //----------------------------------------------------------------------------------------------适配 //添加并且显示 list.setAdapter(adapter);

这是我们在android 开发中常用的构造一个ListView组件的方法,对于大家来说异常的熟悉,不用废话了。

很多人知道这么用,但为什么这么用?这么用的原理是什么?

明白了 “是什么” 和 “为什么” 才是我们走向成熟的标准。

下面就以ListView为样例来剖析一下他的工作原理:

结构如下:
第一步:构建BaseAdapter抽象父类

public abstract class BaseAdapter {        public String[] item;     //ListView 中的子项Item        public String[] getItem() {                return item;        }        public void setItem(String[] item) {                this.item = item;        }}

第二步:定义ListView方法的接口IListView

public interface IListView {          public void setAdapter(BaseAdapter adapter);}

第三步:ListView组件类

public class ListView extends BaseAdapter implements IListView{        @Override        public void setAdapter(BaseAdapter adapter) {                this.setItem(adapter.getItem());        }}

至此ListView组件已经成型,接下来完成适配器Adapter类
第四步:适配器接口IAdapter

public interface IAdapter {    public void setData();}

第五步:生成适配器SimpleAdapter

public class SimpleAdapter extends BaseAdapter implements IAdapter{        ArrayList
< String,String>> arrayList; String name; public SimpleAdapter(ArrayList
< String,String>> arrayList,String name) { this.arrayList=arrayList; this.name=name; this.item=new String[arrayList.size()]; setData(); } @Override public void setData() { for(int i=0;i

Ok,创建类结束!
应用:

ListView listView=new ListView();                                ArrayList
< String,String>> arrayList=new ArrayList
>(); for(int i=0;i<10;i++){ HashMap
map=new HashMap
(); map.put("NAME", "Item"+i); arrayList.add(map); } SimpleAdapter adapter1=new SimpleAdapter(arrayList, "NAME"); listView.setAdapter(adapter1);

输出结果:
--------------------------------------------------------------------------------------------------------------------------------------------------------------
总结:
1.  其实样例中的ListView与SimpleAdapter都是继承了抽象父类BaseAdapter,同时ListView又包裹了SimpleAdapter,从而实现了所谓的“适配”。
2  .当然Android API中还有ArrayAdapter等其他适配器,不过原理同SimpleAdapter一样,比葫芦画瓢罢了…… ,
    这同时也解释了为什么我们在写 “自定义ListView”  时为什么要继承父类BaseAdapter!
3.  同样的原理,不同的表现方式。
适配器模式设计原则:
1.使用对象组合,面向接口和抽象编程(万年不变)
2.“开闭”原则
使用场合:
1.软件系统结构需要升级或扩展,又不想影响原有的系统的稳定运行的时候;
2.转换类之间的差别不是太大的时候;
3.想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作时候。

转载地址:http://ypzmi.baihongyu.com/

你可能感兴趣的文章
在SqlServer中用自定义函数返回动态表内容
查看>>
CONTAINS和FREETEXT
查看>>
深入探讨Truncate Table
查看>>
SQL Server 2008 下的备份和日志收缩
查看>>
SQL 中 Delete、Truncate、Drop 的异同
查看>>
数据仓库的粒度
查看>>
利用同义词简化SQL Server 2005开发
查看>>
查询处理的逻辑顺序
查看>>
SQL Server 2008中的数据压缩策略
查看>>
实现SQL Server 2008数据压缩
查看>>
Sql Server 2005 统计信息用途
查看>>
全文索引的用法
查看>>
grouping sets && grouping_id
查看>>
MS-SQLSERVER数据库SUSPECT状态如何解决
查看>>
视图更新
查看>>
创建数据库快照
查看>>
报表 groupby with rollup
查看>>
按区域取固定数据的值
查看>>
取得库中所有的外键
查看>>
SQL Server DBCC命令
查看>>