本文首发于cdream的个人博客,点击获得更好的阅读体验!

欢迎转载,转载请注明出处。

本文简述适配器模式,考虑到java中没有多继承就只写了对象适配器模式,然后例子是怎么用转接口把3.5mm耳机插在小米8上面。

image-20181214211029904

适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配器使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。

适配器模式允许一个已存在的类的接口被用作另一个接口。通常可以在不需要修改源代码的情况下使用已存在的类。

其实在生活中,适配器随处看见,例如下图,一个type-c转耳机口的适配器。接下来让我看看适配器模式的结构,并用java代码来实现一个type-c接口的手机与3.5mm的耳机通过适配器连接。

image-20181214184815532

适配器模式主要解决两个问题
1.转换当前接口为客户端需要的接口
2.通过适配器使用没有我们需要的接口的类

描述看似相同,实际上出发点不同~嘿嘿,意会意会

适配器模式有两种,一种是类适配器,不过需要支持多继承的语言才能实现,本文主要讲解单继承也可以实现的对象适配器。下图是对象适配器模式的类图,Client需要一个实现Target接口的类来完成工作,而当前我们提供的只有Adaptee类,这时该怎么办呢?恩,我们就造一个适配器(adapter)来完成这个需求。

image-20181214075257986

涉及到的主要角色:

Target:目标接口,也就是我们期待得到的接口。

Adaptee:当前拥有的接口,需要适配,已满足客户端的要求。

Adapter:适配器类,适配器模式的核心,就是将Adaptee转换成需要的接口的具体类。

这个是小米8手机类,只提供插TypeC耳机的接口

  1. public class Mi8{
  2. private TypeCEraPhones eraPhones;
  3. //打电话功能
  4. public void call() {
  5. System.out.println("打电话");
  6. }
  7. //播放音乐,有耳机就用耳机,没耳机就外放
  8. public void playMusic() {
  9. if (eraPhones != null){
  10. eraPhones.play();
  11. }else{
  12. System.out.println("外放");
  13. }
  14. }
  15. // 插个TypeC接口的耳机
  16. public void setEraPhones(TypeCEraPhones eraPhones) {
  17. this.eraPhones = eraPhones;
  18. }
  19. }

这个是TypeC接口的耳机接口,听说用这个接口的耳机都好好贵呢~~

  1. public interface TypeCEraPhones {
  2. void play();
  3. }

这个是我们以前剩下的能听个响的3.5mm接口的耳机

  1. public class Mi35MMEraPhones {
  2. public void play(){
  3. System.out.println("使用3.5mm孔的小米耳机播放声音");
  4. }
  5. }

怎么办呢,是花大钱买个新的耳机(想想,如果真是个复杂的对象,重新实现功能是不是很头大),还是对当前这个3.5mm的耳机爆改,可是我还有个需要使用3.5mm的mp3 ,

版权声明:本文为cdream-zs原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cdream-zs/p/10121875.html