设计模式-7-适配器模式
2016-04-01 15:47
465 查看
适配器模式
原理:把一个类的接口变成客户端所期待的另外一个接口,从而使原本接口不匹配而不能在一起工作的两个类能够在一起工作结构
目标接口(Target):客户所期待的接口
需要适配的类(Adaptee):需要适配的类
适配器(Adapter):通过包装一个需适配的类,把原接口转换成目标接口
例子:
比如一个Adaptee是工人,他所掌握的技能有:打代码和查找Bug,现在我们需要的岗位技能(目标):打代码和查找Bug和设计软件结构(这里我们很容易想到的方法就是我们可以在这个工人中添加一个设计软件结构的方法,但是这样就破坏了这个类原有的结构)这个时候我们可以通过适配器的模式解决这个问题在这个适配器模式有两种方法
代码示例(面向类的设计模式)
继承Adaptee实现Target接口Adaptee
public class WorkerAdaptee { public void playCode(){ System.out.println("我会打代码"); } public void lookupBug() { System.out.println("我会查找Bug"); } }
Target接口
public interface NewWorkerInterface { public void playCode(); public void lookupBug(); public void designSoftware(); }Adapter
public class NewWorkerAdapter extends WorkerAdaptee implements NewWorkerInterface { @Override public void designSoftware() { // TODO Auto-generated method stub System.out.println("我会设计软件结构"); } }客户端测试
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub NewWorkerAdapter newWorkerAdapter = new NewWorkerAdapter(); newWorkerAdapter.playCode(); newWorkerAdapter.lookupBug(); newWorkerAdapter.designSoftware(); } }测试结果
我会打代码 我会查找Bug 我会设计软件结构
面向对象的适配器模式(推荐用这种)
Adapteepublic class WorkerAdaptee { public void playCode(){ System.out.println("我会打代码"); } public void lookupBug() { System.out.println("我会查找Bug"); } }
Target接口
public interface NewWorkerInterface { public void playCode(); public void lookupBug(); public void designSoftware(); }
Adapter 这个类中包含Adaptee对象
public class WorkerAdapter implements NewWorkerInterface{ WorkerAdaptee workerAdapter = new WorkerAdaptee(); @Override public void playCode() { // TODO Auto-generated method stub workerAdapter.playCode(); } @Override public void lookupBug() { // TODO Auto-generated method stub workerAdapter.lookupBug(); } @Override public void designSoftware() { // TODO Auto-generated method stub System.out.println("我会设计软件结构"); } }客户端测试
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub WorkerAdapter workerAdapter = new WorkerAdapter(); workerAdapter.playCode(); workerAdapter.lookupBug(); workerAdapter.designSoftware(); } }
测试结果
我会打代码 我会查找Bug 我会设计软件结构
总结
1.如果我们要实现的接口里面有许多方法,但是我们目标接口只要一个方法的时候我们一颗设计一个人抽象的默认设配器就是一个抽象类中实现了接口中的所以方法。然后Adapter继承这个类,然后重写目标所需要的方法
例如
public interface NewWorkerInterface { public void playCode(); public void lookupBug(); public void designSoftware(); public void aaa(); public void bbb(); public void ccc(); public void ddd(); public void eee(); }我们不需要它的aaa、bbb、ccc、ddd、eee那么我们可以这样解决
设置一个默认的类
public class DefaultAdapter implements NewWorkerInterface{ @Override public void playCode() { // TODO Auto-generated method stub } @Override public void lookupBug() { // TODO Auto-generated method stub } @Override public void designSoftware() { // TODO Auto-generated method stub } @Override public void aaa() { // TODO Auto-generated method stub } @Override public void bbb() { // TODO Auto-generated method stub } @Override public void ccc() { // TODO Auto-generated method stub } @Override public void ddd() { // TODO Auto-generated method stub } @Override public void eee() { // TODO Auto-generated method stub } }然后Adapter继承DefaultAdapter
public class WorkerAdapter extends DefaultAdapter{ WorkerAdaptee workerAdapter = new WorkerAdaptee(); @Override public void playCode() { // TODO Auto-generated method stub workerAdapter.playCode(); } @Override public void lookupBug() { // TODO Auto-generated method stub workerAdapter.lookupBug(); } @Override public void designSoftware() { // TODO Auto-generated method stub System.out.println("我会设计软件结构"); } }这样就不用实现它不需要的方法了
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories