Android 内功心法(1.6)——android常用设计模式之适配器模式
来源:互联网 发布:恒泰实达程序员怎么样 编辑:程序博客网 时间:2024/06/05 07:43
基本概念:
将一个类的接口转换成程序需要的另一个接口。adapter 使得原本由于接口不兼容而不能一起工作的那些类一起工作。
适配器模式有两种,类适配器和对象适配器
使用场景:
想要使用一个已经存在的类,它的方法或者所做的事情基本相同的时候就可以考虑使用适配器模式。当然,前提是这两个类都不太容易修改的时候使用。
使用目的:
当两段十分相似的逻辑无法合并的时候就需要使用适配器模式来让相同的接口下适配不同的方法结构。说到底就是为了减少程序接口,统一接口方法的一种优化方法。
/** * 适配器的对外接口 */public abstract class Targets { //记录球员的名字 protected String name; public Targets(String name) { this.name = name; } //球员有两个职责,一个是进攻,一个是防守 public abstract void getAttack();//进攻 public abstract void getGuard();//防守}
所有需要使用到具体类的逻辑都只能调用抽象类中的方法
/** * 普通类,可以直接适配适配器类对外的接口 */public class Normal extends Targets { public Normal(String name) { super(name); } @Override public void getAttack() { //具体逻辑 Log.e("test", "进攻"); } @Override public void getGuard() { //具体逻辑 Log.e("test", "防守"); }}
对于继承了抽象类的普通类,调用其接口没有问题
/** * 特殊类,不可以直接适配适配器类对外的接口 */public class Special { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void getAttackAdapter() { //具体逻辑 Log.e("test", "进攻"); } public void getGuardAdapter() { //具体逻辑 Log.e("test", "防守"); }}
这是个特殊类,也需要调用抽象类(Targets)中的接口。
怎么做呢?这时候就有了适配器类
/** * 特殊类的适配器,使其能够适配Targets的对外接口 */public class Adapter extends Targets { //在其内部实例化一个特殊类 private Special special; public Adapter(String name) { super(name); special = new Special(); special.setName(name); } @Override public void getAttack() { //调用对外接口的时候实际上执行的是特殊类的接口 special.getAttackAdapter(); } @Override public void getGuard() { //调用对外接口的时候实际上执行的是特殊类的接口 special.getGuardAdapter(); }}
这样,当Special 类需要使用Targets 中的接口的时候,就可以用adapter类去代理special类去做处理。
运行方式:
private void test() { //实例化一个普通类,符合对外接口的类 Normal normal = new Normal("库里"); normal.getAttack();//库里进攻 //实例化一个特殊类,姚明听不懂英语,就需要适配器去处理中文(getAttackAdapter()) Adapter special = new Adapter("姚明"); special.getGuard();//姚明防守 }
其中,姚明因为不懂英语,所以它不知道getAttack()和getGuard()的意思是让它做什么。
这时候就需要一个翻译(adapter),要求姚明调用英文(getGuard())的时候,翻译(adapter)就将这句英语处理,说给姚明的就变成了中文(getGuardAdapter());
这样,即使姚明(Special)不懂英文(Targets),有了翻译(Adapter),姚明也可以正常的交流(逻辑处理)了。
这就是适配器的作用。
当一个类实在是无法改变数据接口或者接口方法的时候就能够选择适配器模式来满足需求。
就像android框架设计的时候,水平稍弱的程序前期设计的时候考虑不周全,后期发现代码冗余但是逻辑复杂无法修改的时候,就可以选择适配器模式来优化。
换句话说,适配器模式就是在病入膏肓的时候的一剂猛药。
前期的精心设计就像是疾病的预防,后期无法通过预防(修改)来达到目的的时候就需要猛药(适配器)来处理了。
- Android 内功心法(1.6)——android常用设计模式之适配器模式
- Android 内功心法(1.1)——android常用设计模式之单例模式
- Android 内功心法(1.2)——android常用设计模式之工厂模式
- Android 内功心法(1.3)——android常用设计模式之观察者模式
- Android 内功心法(1.4)——android常用设计模式之代理模式
- Android 内功心法(1.5)——android常用设计模式之命令模式
- Android 内功心法(1.7)——android常用设计模式之组合(合成)模式
- Android 内功心法(1.8)——android常用设计模式之访问者模式
- Android 内功心法(1.10)——android常用设计模式之建造者(Builder)模式
- Android 内功心法(1.2.1)——android常用设计模式之工厂模式后续抽象工厂模式
- Android 内功心法(1)——设计模式的原则和android中常用的模式
- Android 内功心法(1.9)——java设计模式之装饰模式
- Android 内功心法(番外)——写在设计模式前,面对对象编程基础
- 设计模式—面向对象程序员的内功心法
- Android 常用设计模式2 适配器模式
- Android设计模式之适配器模式
- android设计模式之适配器模式
- Android 设计模式之适配器模式
- mongodb修改用户密码的2种方法
- 【DP】bzoj1002
- HttpURLConnection实现文件断点续传
- android APK反编译查阅源码
- Runnable&Callable
- Android 内功心法(1.6)——android常用设计模式之适配器模式
- 利用NSProxy解决NSTimer内存泄漏问题
- 逼格程序员—比逼格更有逼格
- (一) jsp中代替脚本的一段代码
- 如何将excel转换成word文档格式
- 其它语言项目转换为maven项目并打包成jar包
- SPSS基础教程:SPSS的启动与退出
- 排序-冒泡排序和选择排序(golang)
- Java线程池使用说明