适配器模式
2015-12-10 11:41
267 查看
什么是适配器模式
生活中的例子
适配器模式的模块图
再论适配器在Android中的AdpaterView
接触适配器模式是在Android的ListView中的,个人感觉其实就是有一个A类,他有一个方法A.method()需要使用B类数据,但是可能B类数据和A类的内部实现不太一样,这时并不是修改A类或者B类,而是通过一个适配器,使得适配器从B类获取数据,A从适配器获取数据,从而完成了相应的功能,那么如果有一个C类过来时,就再根据需要写一个适配器就可以了,这样实现了程序之间的松耦合。
首先,我们定义一台笔记本
接着,我们定义一个键盘
最后,我们来看看如何实现一个适配器
以上功能齐了后,我们来看看如何完成打字
以上,便完成了从USB到PS/2的过程,如果还有更奇葩的接口的键盘,你需要做得仅仅是实现Target,完成相应的数据适配方法即可。
暂时没做好图,大概就是上面的模式,一般情况,需要适配Client类到Adaptee类,我们令Target方法作为Client的抽象适配器,Client需要适配数据,仅仅需要调用Target的方法即可,具体数据适配,我们通过实现Target类的Adapter类实现多态性。
生活中的例子
适配器模式的模块图
再论适配器在Android中的AdpaterView
什么是适配器模式
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——Gang of Four接触适配器模式是在Android的ListView中的,个人感觉其实就是有一个A类,他有一个方法A.method()需要使用B类数据,但是可能B类数据和A类的内部实现不太一样,这时并不是修改A类或者B类,而是通过一个适配器,使得适配器从B类获取数据,A从适配器获取数据,从而完成了相应的功能,那么如果有一个C类过来时,就再根据需要写一个适配器就可以了,这样实现了程序之间的松耦合。
生活中的例子
虽然这样看来有些奇怪,但是假设你有一台笔记本电脑,你想要接一个PS2键盘,但是你的笔记本只有USB接口,这时候你想要在用PS/2键盘在笔记本上打字,就需要一个适配器,一头接USB,一头接PS/2,下面一段代码,演示了这个过程。首先,我们定义一台笔记本
package adapterMode; public class LapTop { private Target target; //打字方法,注意这里对电脑而言是调用的适配器来打字 public void printSomething(){ target.adpateUSB(); } public void setAdapter(Target target){ this.target = target; } }
接着,我们定义一个键盘
package adapterMode; public class PS2Keyboard { public void printWords(){ System.out.print("打印"); } }
最后,我们来看看如何实现一个适配器
package adapterMode; //适配器接口这个接口主要需要完成适配笔记本USB口的任务 public interface Target { public void adpateUSB(); }
package adapterMode; //具体的USB转PS/2的适配器 public class Adapter implements Target { //通过组合的方法获得PS/2键盘的实例 private PS2Keyboard ps2Keyboard = new PS2Keyboard(); @Override public void adpateUSB() { ps2Keyboard.printWords(); } }
以上功能齐了后,我们来看看如何完成打字
package adapterMode; public class Main { public static void main(String[] args) { //获得一台笔记本电脑 LapTop thinkPad = new LapTop(); //获得一个USB转PS/2的适配器 Adapter AdapterUSBtoPS2 = new Adapter(); //适配器和电脑连上 thinkPad.setAdapter(AdapterUSBtoPS2); //打字 thinkPad.printSomething(); } }
以上,便完成了从USB到PS/2的过程,如果还有更奇葩的接口的键盘,你需要做得仅仅是实现Target,完成相应的数据适配方法即可。
适配器模式的模块图
Created with Raphaël 2.1.0ClientInterface TargetClass Adapter implements TargetAdaptee暂时没做好图,大概就是上面的模式,一般情况,需要适配Client类到Adaptee类,我们令Target方法作为Client的抽象适配器,Client需要适配数据,仅仅需要调用Target的方法即可,具体数据适配,我们通过实现Target类的Adapter类实现多态性。
再论适配器在Android中的AdpaterView
常用到的ListView其实是继承了AdapterView,在Android中我们使用ListView其实大概就是这样一个过程,AdapterView(ListView的父类)负责绘制等功能,这些功能的数据来源通过Adapter获取,我们通过实现Adapter完成对数据的获取,所以你实现的Adapter的几个方法就完成了数据到AdapterView的数据适配。相关文章推荐
- android 微信支付
- C++使用函数模板
- Integer To Roman leetcode java
- php数组函数-array_intersect()
- ViewPager动态加载布局
- 通讯录数据库插入数据
- 天声人語 20151210 「あかつき」に女神ほほえむ
- 简单了解 java urlrewrite
- 通过反射与注解拼装sql查询的小例子
- Java 使用Redis缓存工具的图文详细方法
- ORA-00979: not a GROUP BY expression
- gitlab服务安装
- 模糊k-means聚类
- 开机自启加入任务栈
- linux基础(十一)----linux编程基础----变量
- linux基础(十一)----linux编程基础----变量
- 界面干货盘点 | Web设计器教程连载和海量设计资源
- java实现图片裁剪
- AS使用Android Annotation
- Laravel 使用Redis 笔记