ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《设计模式修炼真经》09 — 适配器模式

2021-10-04 21:02:00  阅读:143  来源: 互联网

标签:Target 适配器 09 request 接口 void 设计模式 public


1、定义

适配器模式的定义:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作;

适配器模式又叫做变压器模式,也叫做包装模式(Wrapper),但是包装模式不止一个,还包括装饰模式。

2、类图

适配器模式分为结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求实现者了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

类结构型的适配器模式的通用类图如下:

对象结构型的适配器模式的通用类图如下:

两种适配器的通用类图差别不大,唯一的区别就是类结构型的适配器是继承关系,而对象型的适配器模式是关联关系

无论哪种适配器模式,都需要设计三种角色:

  • 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口;
  • 源(Adaptee)类:它是被访问和适配的现存组件库中的组件接口;
  • 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者;

3、代码实现

类结构型的适配器模式 的Java代码实现如下:

//目标角色
public interface Target {
    //目标角色有自己的方法
    public void request();
}

//目标角色的实现类
public class ConcreteTarget implements Target {
    public void request() {
        //do something 
    }
}

//源角色
public class Adaptee {
    //原有的业务逻辑
    public void doSomething(){
        //do something 
    }
}


//适配器角色
public class Adapter extends Adaptee implements Target {
    public void request() {
      super.doSomething();
    }
}

//适配器模式的使用
public class Client {
    public static void main(String[] args) {
       //原有的业务逻辑
       Target target = new ConcreteTarget();
       target.request();
       //现在增加了适配器角色后的业务逻辑
       Target target2 = new Adapter();
       target2.request();
     }
}

对象结构型的适配器模式 的Java代码实现如下:

//目标角色
public interface Target {
    //目标角色有自己的方法
    public void request();
}

//目标角色的实现类
public class ConcreteTarget implements Target {
    public void request() {
        //do something 
    }
}

//源角色
public class Adaptee {
    //原有的业务逻辑
    public void doSomething(){
        //do something 
    }
}

//适配器角色  (关联关系实现)
public class Adapter implements Target
{
    private Adaptee adaptee;
    public Adapter(Adaptee adaptee)
    {
        this.adaptee=adaptee;
    }
    public void request()
    {
        adaptee.specificRequest();
    }
}

//适配器模式的使用
public class Client {
    public static void main(String[] args) {
       //原有的业务逻辑
       Target target = new ConcreteTarget();
       target.request();
       //现在增加了适配器角色后的业务逻辑
       Adaptee adaptee = new Adaptee();
       Target target2 = new Adapter(adaptee);
       target2.request();
     }
}

4、特点

优点
1、客户端通过适配器可以透明地调用目标接口;
2、复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类;
3、将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题;
4、在很多业务场景中符合开闭原则。


缺点
1、适配器编写过程需要结合业务场景全面考虑,可能会增加系统的复杂性;
2、增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱;


5、适用场景

适配器模式(Adapter)通常适用于以下场景:
1、以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致;
2、使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同;



我的视频课
下面是我录制的一些视频课,欢迎大家围观~
《设计模式修炼真经》
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结,代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。
本套课程深入介绍了经典的23种设计模式,并加入了自己的感悟,希望大家能够彻底掌握设计模式,写出最好的代码,达到无招胜有招的境界,最终超越这23种设计模式。

《彻底搞定JVM》
JVM是Java中重要的也是较难理解的内容;
面试者对JVM的了解程度某种程度上反映了面试者技术深度,所以JVM也是面试时经常考察的内容;
本课程从JVM运行流程、数据运行时区域组成部分、类加载机制、垃圾回收机制、内存模型、常见面试题讲解等角度出发,帮你彻底搞定JVM,拿下心仪Offer;

《Android性能优化参考》
本课程包含了Android中的App启动优化、UI优化、内存优化、图片优化、耗电量等常见的性能优化场景,通过学习此课程,你将对整个Android性能优化体系有清晰的认识。

性能优化作为Android高级开发的必备技能,也是大厂面试必考的题目,是体现一个人技术深度最好的试金石。

《面试之排序算法》
排序算法是我们面试被问到最多的基础算法,本课程详细介绍了七种排序算法,包括插入排序、选择排序、冒泡排序、谢尔排序、快速排序、堆积排序和二路并归排序。每种算法都详细介绍了核心思想、详细步骤、时间复杂度和代码实现,希望帮助大家深入理解排序算法,搞定面试!

《Android HyBrid App开发实战》
本课程为Android HyBrid App开发实战课程,由浅入深,从三种App的历史和特点开始,介绍了Android WebView的使用、Java和JS交互的原生方式、著名的WebView安全漏洞、JSBridge的原理和使用,最后通过一个网上商城的实战综合全部内容,让同学们掌握并深入理解Android HyBrid App开发。

《AI导论》
介绍人工智能AI的诞生历史和到现在为止的不同发展阶段;介绍了AI领域中常见的名词概念和其关系,包括机器学习、深度学习、神经网络结构搜索 NAS、生成对抗网络 GAN等;最后对AI发展做出展望。
本课程属于导论课程,旨在帮助同学们从宏观层面把握AI,建立AI的知识体系。

《Java注解精讲》
本课程详细介绍了Java中的注解机制,包括注解的定义和分类,注解的使用和自定义,注解的源码和架构分析;
本课程语言简单凝练,视频短小精悍,让你一次彻底搞懂Java注解!

《Java反射精讲》
反射是Java中重要的也是较难理解的内容;
本课程从反射的定义、作用、原理和使用出发,全方位帮你彻底搞定反射;


您的点赞是我前进的动力~

在这里插入图片描述
给作者买瓶咖啡提提神~


标签:Target,适配器,09,request,接口,void,设计模式,public
来源: https://blog.csdn.net/jiangguangchao/article/details/120607650

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有