Kotlin~Adapter适配器模式

news/2024/11/17 10:30:29/

概念

Adapter(Wrapper) Pattern,连接两个不兼容的接口,让接口不兼容的对象能够相互合作。

适配器中的角色

  • 请求者Client:调用者
  • 目标Target:定义了Client要使用的功能
  • 转化对象Adaptee: 需要适配转化的对象
  • 适配器Adapter:实现转化功能的对象

两种实现方式

  • 类适配器模式,用继承
    类适配器

  • 对象适配器模式,用组合
    对象适配器

代码实现

interface CTemp {fun getCTemp(): Float
}open class FTemp(val temp: Float
)// 使用继承的方式
class F2CAdapter1(temp: Float) : FTemp(temp), CTemp {override fun getCTemp(): Float {return (temp - 32) * 5 / 9}
}class F2CAdapter2(val fTemp: FTemp) : CTemp {override fun getCTemp(): Float {return (fTemp.temp - 32) * 5 / 9}}fun main() {val f = FTemp(100f)val adapter1 = F2CAdapter1(f.temp)println("类继承 f: ${f.temp},c:${adapter1.getCTemp()}")val adapter2 = F2CAdapter2(f)println("对象 f: ${f.temp},c:${adapter2.getCTemp()}")}

优缺点

优点:

  • 把转化代码从业务逻辑中分离出来
  • 在不修改现有代码的情况下实现转化
  • 让代码更加模块化而且可以复用

缺点:

  • 代码复杂度会变高
  • 重复代码
  • 很难Debug

应用场景

  • 基本应用:支持多接口,重用现有代码
  • 连接遗留代码和新系统
  • 连接第三方库
  • 单元测试:模拟真正对象的行为

总结

安卓中recyclerview使用的适配器是对象适配器,RecyclerView.Adapter提供了抽象和泛型支持。安卓中上下文wrapper则使用了继承适配器模式,顶层是ContextWapper继承了Context、包装了ContextImpl,四大组建则继承ContextWapper实现各自的扩展。

安卓中的上下文
参考:

  • 【设计模式】适配器模式 - Nemo& - 博客园
  • 适配器模式(Adapter模式)详解

http://www.ppmy.cn/news/35200.html

相关文章

Java反射机制

1.定义java的反射(reflection)机制是在java运行状态中,对任意一个类,都能知道这个类的所有方法和属性。 对于任意一个对象, 都能够调用它的任意方法和属性, 也可以修改其部分信息。 这种动态获取值以及动态…

【Vue3】用Element Plus实现列表界面

🏆今日学习目标:用Element Plus实现列表界面 😃创作者:颜颜yan_ ✨个人格言:生如芥子,心藏须弥 ⏰本期期数:第四期 🎉专栏系列:Vue3 文章目录前言效果图目录简介修改vite…

Java的基础面试题

一.java基础1.JDK和JRE有什么区别?JDK是java开发工具包,JRE是java运行时环境(包括Java基础类库,java虚拟机)2.和equals的区别是什么?比较的是两者的地址值,equals比较的是两者的内容是否一样3.两…

Python和Excel的完美结合:常用操作汇总(案例详析)

在以前,商业分析对应的英文单词是Business Analysis,大家用的分析工具是Excel,后来数据量大了,Excel应付不过来了(Excel最大支持行数为1048576行),人们开始转向python和R这样的分析工具了&#…

内核线程与用户线程的区别

内核线程和用户线程是操作系统中的两种不同类型的线程,它们有以下异同点: 异同点: 相同点:内核线程和用户线程都是线程的一种,都可以执行任务。 不同点:内核线程是由操作系统内核创建和管理的&#xff0c…

举一反三学python(5)—初识数组

一、引例 大家对MBI(身体质量指数)都有所了解吧! MBI(身体质量指数) MBI指数计算方法为体重除以身高的平方,其中体重的单位为千克,身高的单位为米。 正常中国人的BMI范围区间在…

Prometheus cadvisor容器监控和node-exporter节点监控

往期文章 Prometheus监控系统 https://blog.csdn.net/qq_39578545/article/details/108754585 Docker之compose介绍 使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。下面介绍Docker官方产品,Docker Comp…

五分钟带你了解 计算机操作系统——进程与线程(万字详解·图文)

进程线程可以说是操作系统基础,看过很多关于这方面知识的文章都是纯理论讲述,我准备用图解的形式带你学习和掌握进程、线程。文字力求简单明了,对于复杂概念做到一个概念一张图解,在操作系统课程的学习中,很多人对进程…