适配器模式在Android中的应用
工资翻倍篇之适配器模式
先了解一下适配器的基本概念,然后再详细分析一些适配器的样例,最后通过Android开发中经常使用的适配器模式进行分析,保证对适配器模式理解透彻。
1、适配器的基本概念
1.1类适配器模式
说明:
当新接口出现的时候,因为和老的接口不兼容,这个时候,我们採用一个适配器类实现新的接口而且继承老的业务类,这样就能同一时候处理新老业务。
演示样例代码:
1.2对象适配器模式
说明:当新接口出现的时候。因为和老的接口不兼容,这个时候。我们採用一个适配器类实现新的接口并在内部持有一个老业务逻辑的对象,这样就能把对老接口的调用所有中转给老的业务逻辑,从而解决接口的兼容性问题
演示样例代码:
1.3接口适配器模式
说明:也叫缺省适配器模式,主要解决接口的复用问题:有时候可能我们的业务仅仅须要使用接口中的某一个方法而不是所有方法。可是因为接口的语言特性而 不得不实现所有的抽象方法。这样就会使得接口的使用过程非常麻烦,特别是接口中存在非常多抽象方法的时候。面对接口的这类问题。我们能够採用一个抽象类(也可 以不是抽象类)去实现接口。然后让我们的类去继承这个抽象类同一时候仅仅重写我们感兴趣的方法就可以。
2、类的适配器和对象适配器的分析
2.1类的适配器
如上图,当我们的Client须要一个新功能的时候。我们定义了一个RequiredInterface,里面有我们须要实现的方法requiredMethod(),
刚好这个requiredMethod()须要的功能已经在ExistingClass中实现了,ExistingClass是已经存在的一个类,里面有我们须要的方法usefulMethod()。这个时候,我们要做的就是创建一个NewClass新类,让他继承自ExistingClass,然后实现RequiredMethod,重写requiredMethod,将usefulMethod()的逻辑委派为requiredMethod,这样就实现了接口的适配了。
类适配器样例
火箭公司有一个火箭仿真事件EventSim,里面有非常多仿真的火箭RocketSim。RocketSim是一个接口,想要增加EventSim的火箭都必需要实现RocketSim接口。
如今有一款火箭PhysicalRocket。这款火箭提供的功能和RocketSim相似。我们须要把这款火箭放到火箭仿真功能EventSim中,这个时候我们能够运用适配器模式,创建一个新的OozinozRocket继承PhysicalRocket同一时候实现RocketSim类。
新的rocket就同一时候具有PhysicalRocket的属性和仿真属性了。
同一时候我们须要将PhysicalRocket中的功能getBurnTme,getMass,getThrust委派给新的OozinozRocket的getMass,getThrust。
这样一来OozinozRocket就能放到仿真功能EventSim中了。
以上就是类的适配器。通过子类进行适配。 在类的适配器中。新的适配类OozinozRocket实现了须要的接口RocketSim,并继承了现有的类PhysicalRocket。
当你须要适配的一组方法并不是被定义在接口中时,这样的方法就不奏效了。此时须要创建一个对象适配器,它使用了委派并不是继承。
2.2对象适配器
和上面的类的适配器进行比較能够发现,类的适配器中须要的是一个接口RequiredInterface,而对象适配器中须要的是一个类RequiredClass。
这个时候就不能使用类的适配器了,而须要使用对象适配器。
这里的NewClass是对象适配器的样例,NewClass实现了RequiredClass。这样就满足了client的须要,同一时候NewClass和ExistingClass是关联关系。ExistingClass是NewClass中的一个成员变量。
对象适配器样例
样例和上面类的适配器相似,只是多赘述
这里的仿真事件中须要的不再是接口。而是一个Skyrocket类。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
我们的对象适配类OozinozSkyrocket实现了Skyrocket,内部并持有一个PhysicalRocket。由于子类仅仅能继承一个父类。所以OozinozSkyrocket想要具有PhysicalRocket的功能就必须持有一个PhysicalRocket对象,然后将须要的功能委派给OozinozSkyrocket。
初始化的时候须要传入一个PhysicalRocket对象对内部持有的PhysicalRocket进行初始化。
如此就将PhysicalRocket通过OozinozSkyrocket适配类适配成须要的Skyrocket类了。所以适配器的目的就是将一个类适配成须要的一个类。
如今再来看开头的一些概念,就会认为清晰非常多了。
可能你另一点模糊,可是你的功底已经练得差点儿相同了,只是就仅仅差打通任督二脉的那一股劲了。
我们来看看android开发中我们常遇到的适配器模式。你就会豁然开朗了。
3、Android中的适配器模式
在开发android程序时。我们用到最多的适配器模式就是写listView的时候经常使用到的BaseAdapter。
ListView控件大家再熟悉只是了。要想将一组数据显示到listView上,就必需要新建一个MyAdapter继承自BaseAdapter,然后
listView.setAdapter(myAdapter);将我们的数据设置到listView控件上进行显示。
所以我们必须将我们须要显示的一组数据适配成BaseAdapter,我们新建一个MyAdapter继承自须要的类BaseAdapter,然后内部持有我们须要显示的数据,这是典型的对象适配器。
android中的ListView控件,在显示listView列表的时候,并非将每一组数据都硬塞给控件,而是定义了ListAdapter接口,ListView的实现使用了ListAdapter接口。我们的BaseAdapter实现了ListAdapter。然后我们提供了一个适配器,将数据转换为BaseAdapter。
不仅是Android的ListView,Swing提供的显示列表的空间JTable也是用到了对象适配器。
适配器模式在Android中的应用的更多相关文章
- [Android]GOF23种设计模式 & Android中的设计模式
GOF23种设计模式 设计原则: 1. 单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因 2. 开放-封闭原则(OCP):软件实体(类.模块.函数等)应该可以扩展,但是不可修改.即对 ...
- Android中你应该知道的设计模式
建造者模式 建造者模式最明显的标志就是Build类,而在Android中最常用的就是Dialog的构建,Notification的构建也是标准的建造者模式. 建造者模式很好理解,如果一个类的构造需要很 ...
- Android中的Adapter 详解
http://blog.csdn.net/tianfeng701/article/details/7557819 (一) Adapter介绍 Android是完全遵循MVC模式设计的框架,Activi ...
- 《Android源代码设计模式解析》读书笔记——Android中你应该知道的设计模式
断断续续的,<Android源代码设计模式解析>也看了一遍.书中提到了非常多的设计模式.可是有部分在开发中见到的几率非常小,所以掌握不了也没有太大影响. 我认为这本书的最大价值有两点,一个 ...
- android中常见的设计模式有哪些?
建造者模式 建造者模式最明显的标志就是Build类,而在Android中最常用的就是Dialog的构建,Notification的构建也是标准的建造者模式. 建造者模式很好理解,如果一个类的构造需要很 ...
- Android中的设计模式
一.设计模式的分类 总体来说23种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式 ...
- Android中的LinearLayout布局
LinearLayout : 线性布局 在一般情况下,当有很多控件需要在一个界面列出来时,我们就可以使用线性布局(LinearLayout)了, 线性布局是按照垂直方向(vertical)或水平方向 ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
- Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)
之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...
随机推荐
- Codeforces Round #467 (Div. 2) E -Lock Puzzle
Lock Puzzle 题目大意:给你两个字符串一个s,一个t,长度<=2000,要求你进行小于等于6100次的shift操作,将s变成t, shift(x)表示将字符串的最后x个字符翻转后放到 ...
- BZOJ1266 [AHOI2006]上学路线route Floyd 最小割 SAP
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1266 题意概括 一个无向图,第一问:从1~n的最短路. 第二问,删除价值总和最小的边,使得1~n的 ...
- python3之Django表单(一)
1.HTML中的表单 在HTML种,表单是在<form>...</form>种的元素,它允许用户输入文本,选择选项,操作对象等,然后发送这些数据到服务器 表单元素允许用户在表单 ...
- JS高级-原型等概念深入理解
一 数据类型: 基本(值)数据类型: string number undefined null boolean 对象(引用)类型 [ 查找对象的属性时,会查找原型链 设置属性时,一般在构造函数里面设置 ...
- 论maven release的必要性
大多数java开发的小伙伴都用过maven来对包进行管理.在自己写项目的过程中,对自己的项目也会进行groupdId,artifactId,version的配置.下面我们来对着3个配置进行简单说明. ...
- MySQL数据库基本用法
远程连接数据库 mysql -u root -p #-u 用户名 -h后面写要连接的主机ip地址 -u后面写连接的用户名 -p回车后写密码 回车后输入密码,当前设置的密码为toor 数据库操作 创建数 ...
- html 音乐 QQ播放器 外链 代码 播放器 外链 代码
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha QQ播放器 外链 代码 播放器 外链 代码 ======== 歌曲链接 QQ播放器 外链 ...
- 20172302《程序设计与数据结构》实验四Android程序设计实验报告
课程:<程序设计与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年5月30日 必修/选修: 必修 1.实验内容 (1)And ...
- centos7 重置root 密码
重置Centos 7 Root密码的方式和Centos 6完全不同.让我来展示一下到底如何操作. 1 - 在启动grub菜单,选择编辑选项启动 2 - 按键盘e键,来进入编辑界面 3 - 找到Linu ...
- 喵哈哈村的魔法考试 Round 16 (Div.2) 比赛题解
A 实际上我们for一遍就好. 坑点就是会爆int #include<bits/stdc++.h> using namespace std; const int maxn = 1e5+7; ...