适配器模式:将一个类的接口,转换成客户期望的另一个接口,让不兼容的接口变成兼容。

1.类适配器模式:通过多重继承来实现适配器功能。多重继承就是先继承要转换的实现类,再实现被转换的接口。

2.对象适配器模式:通过组合来实现适配器。

什么是适配器模式?或者说适配器模式有什么作用呢?上面已经定义的很清楚了。下面我们再用一张草图来更形象的描述这一设计模式。

这确实是一张草图,图中1就好比我们的普通耳机接口,3就好比苹果手机接口,2就好比耳机转接头,只有这样苹果手机才能使用普通耳机,模块2就相当于一个适配器。

对于我们程序中的代码来说,1是我们自己系统的接口,3是其他厂家的系统接口,2就是我们为了对接这两个系统加的适配器。这样就不至于修改1,3部分的代码。

适配器工作看起来就像一个中间人,那么让我们来看看具体JAVA代码的表述:

耳机3.5mm接口:

/**
* 耳机 : 3.5mm接口
* @author monkjavaer
* @date 2018/08/29 21:32
*/
public interface Is35mmEarPhone { /**
* 这是3.5mm接口耳机
*/
void is35mmEarPhone(); }

  

type-C接口:

/**
* type-C接口
* @author monkjavaer
* @date 2018/08/29 21:29
*/
public interface TypeC { /**
* type-C接口
*/
void isTypeC();
}

  

华为某款手机类实现type-c接口:

/**
* 手机Type-c接口
* @author monkjavaer
* @date 2018/08/29 21:45
*/
public class PhoneTpyeC implements TypeC { @Override
public void isTypeC() {
System.out.println("我是手机Type-C接口");
}
}

  

那么问题来了,怎么让只有type-c接口的华为手机能使用3.5mm接口的耳机呢?当然是适配器模式了。

类适配器模式:

/**
* 耳机3.5mm接口转换为Type-C接口的适配器
*
* 类适配器模式:通过多重继承来实现适配器功能。多重继承就是先继承要转换的实现类,再实现被转换的接口。
* @author monkjavaer
* @date 2018/08/29 21:47
*/
public class ClassAdapter extends PhoneTpyeC implements Is35mmEarPhone { @Override
public void is35mmEarPhone() {
isTypeC();
}
}

  

test:

/**
* 通过适配器将3.5mm接口转换为type-c接口
* @author monkjavaer
* @date 2018/08/29 22:11
*/
public class ClassAdapterTest { public static void main(String[] args) { Is35mmEarPhone is35mmEarPhone = new ClassAdapter();
is35mmEarPhone.is35mmEarPhone(); } }

  

输出:我是手机Type-C接口.

对象适配器模式:

/**
* 耳机3.5mm接口转换为Type-C接口的适配器
*
* 对象适配器模式:通过组合来实现适配器
* @author monkjavaer
* @date 2018/08/29 22:14
*/
public class ObjectAdapter implements Is35mmEarPhone{ TypeC typeC; public ObjectAdapter(TypeC typeC) {
this.typeC = typeC;
} @Override
public void is35mmEarPhone() {
typeC.isTypeC();
}
}

  

test:

/**
* 通过适配器将3.5mm接口转换为type-c接口
* @author monkjavaer
* @date 2018/08/29 22:19
*/
public class ObjectAdapterTest { public static void main(String[] args) {
Is35mmEarPhone is35mmEarPhone = new ObjectAdapter(new PhoneTpyeC());
is35mmEarPhone.is35mmEarPhone();
}
}

  

输出:我是手机Type-C接口

最新文章

  1. 用SVN check out项目后第三方库丢失
  2. Python基本数据类型之int
  3. GitHub教程--上传项目四步法 GitBash命令行下使用方法
  4. Nginx 之六: Nginx服务器的反向代理功能
  5. UltraEdit for mac 3.2.0.10免费破解版下载!!
  6. 基于visual Studio2013解决面试题之1405归并排序
  7. iosOC/C不可变数组排序
  8. [iOS]C语言技术视频-08-结构体的定义
  9. 版本控制工具--svn和git的使用(二) -----SVN的操作
  10. mysql性能排查思路
  11. [转][PowerShell]ps执行重启IIS
  12. less深度作用域/deep/
  13. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C. Ray Tracing 数学
  14. Daily Scrum (2015/10/31)
  15. BNU4208:Bubble sort
  16. Django 的路由层URL 分组 路由分发 反向解析
  17. WordCount运行详解
  18. pg10.1 orafce3.6 安装
  19. 数据分析处理库Pandas——概述
  20. H - String painter

热门文章

  1. JavaScript--History 对象
  2. 转 phpmyadmin操作技巧:如何在phpmyadmin里面复制mysql数据库?
  3. fiddler不同代理模式的区别
  4. [转]oracle 同义词 synonym
  5. 安装ipython notebook及基本命令(快捷键)
  6. 【alert(1) to win】不完全攻略
  7. HDU_1006_Tick and Tick
  8. 日常开发需要掌握的Maven知识
  9. elk 6.3.2 搭建
  10. BeanFactory和ApplicationContext