当前位置: 首页 > news >正文

适配器模式

把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。

使用步骤:

步骤1: 创建Target接口;

public interface Target {

    //这是源类Adapteee没有的方法
    public void Request(); 
}

步骤2: 创建源类(Adaptee) ;

public class Adaptee {

    public void SpecificRequest(){
    }
}

步骤3: 创建适配器类(Adapter)

//适配器Adapter继承自Adaptee,同时又实现了目标(Target)接口。
public class Adapter extends Adaptee implements Target {

    //目标接口要求调用Request()这个方法名,但源类Adaptee没有方法Request()
    //因此适配器补充上这个方法名
    //但实际上Request()只是调用源类Adaptee的SpecificRequest()方法的内容
    //所以适配器只是将SpecificRequest()方法作了一层封装,封装成Target可以调用的Request()而已
    @Override
    public void Request() {
        this.SpecificRequest();
    }

}

步骤4: 定义具体使用目标类,并通过Adapter类调用所需要的方法从而实现目标

public class AdapterPattern {

    public static void main(String[] args){

        Target mAdapter = new Adapter();
        mAdapter.Request();

    }
}

IO中的适配器模式:

InputStreamReader和OutputStreamWriter类分别继承了Reader和writer接口,但是要创建他们的对象必须在构造函数中传入一个InputStream和OutputStream

的实例,InputStreamReader和OutputStreamWriter类的作用也就是将InputStream和OutputStream适配到Reader和Writer。

适配器是InputStreamReader,源角色是InputStream代表的实例对象,目标接口就是Reader类。

转载于:https://www.cnblogs.com/xiangkejin/p/6875517.html

相关文章:

  • 运行django项目时出错
  • 何为JAVA内部类?
  • 数据库原理中的范式
  • JAVA线程池如何调优
  • 【RF库测试】Variable Should not Exist variable should exist
  • JDK8中为什么移除方法区
  • 对象是否存活,可以这样判断?
  • ETL全量多表同步简述
  • 简洁说明JVM内存区域(运行时数据区)
  • python学习day1--python基础
  • 你了解垃圾收集算法吗?
  • 【Oracle】Oracle的内外连接
  • libpng warning: iCCP: cHRM chunk does not match sRGB
  • 真香,手写一个简易redis
  • 你真的了解逃逸分析(Escape Analysis)么?
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • $translatePartialLoader加载失败及解决方式
  • docker python 配置
  • JavaScript创建对象的四种方式
  • js数组之filter
  • js学习笔记
  • REST架构的思考
  • SQLServer之创建显式事务
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 高性能JavaScript阅读简记(三)
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 检测对象或数组
  • 我的zsh配置, 2019最新方案
  • 源码安装memcached和php memcache扩展
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • Linux权限管理(week1_day5)--技术流ken
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # Apache SeaTunnel 究竟是什么?
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (笔试题)分解质因式
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (三)终结任务
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)负载均衡,回话保持,cookie
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .FileZilla的使用和主动模式被动模式介绍
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .Net 8.0 新的变化
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET中 MVC 工厂模式浅析
  • /var/lib/dpkg/lock 锁定问题
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [BROADCASTING]tensor的扩散机制
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]
  • [C++]AVL树怎么转
  • [CF494C]Helping People