首页 > 编程语言 >Java设计模式 —— 适配器模式

Java设计模式 —— 适配器模式

时间:2022-10-06 23:14:41浏览次数:64  
标签:Adapter Java 适配 适配器 模式 void 设计模式 public

7 适配器模式

7.1 结构型模式

结构型模式(Structural Pattern) 关注如何将现有类或对象组织在一起形成更强大的结构。结构型模式根据描述目标不同可以分为两种:

  • 类结构型模式:关心类的组合,由多个类组成,一般只存在继承和实现关系
  • 对象结构型模式:关心类与对象的组合,通过关联关系在一个类中定义另一个类的实例对象,然后调用其方法

根据合成复用原则,应该尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式

7.2 适配器模式概述

Adapter Pattern: 将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。

适配器模式既可以作为类适配器模式,也可以作为对象适配器模式。

类适配器模式结构图如下所示:

对象适配器模式结构图如下所示:

7.3 类适配器模式实现

7.3.1 目标抽象类

public interface Target {
  public void request();
}

7.3.2 适配者类

public class Adaptee {
  public void specificRequest() {
    // 业务代码
  }
}

7.3.3 适配器类

public class Adapter extends Adaptee implements Target {
  public void request() {
    super.specificRequest();
  }
}

7.3.4 客户端调用类

public class Client {
  public static void main(String[] args) {
    // 通过适配器类调度被适配类的方法
    Target t = new Adapter();
    t.request();
  }
}

7.4 对象适配器模式实现

7.4.1 目标抽象类

public abstract class Target {
  public void method() {
    System.out.println("Father Method.");
  }
  
  // 抽象方法,待适配器类实现
  public void request();
}

7.4.2 适配者类

public class Adaptee {
  public void specificRequest() {
    // 业务代码
  }
}

7.4.3 适配器类

public class Adapter extends Target {
  // 定义适配者对象
  private Adaptee adaptee;
  
  // 通过构造方法实例化适配者对象
  public Adapter() {
    adaptee = new Adaptee();
  }
  public void request() {
    adaptee.specificRequest();
  }
}

7.4.4 客户端调用类

public class Client {
  public static void main(String[] args) {
    Target t = new Adapter();
    t.method();
    
    // 通过成员变量调用适配者对象的方法
    t.request();
  }
}

7.5 缺省适配器模式

Default Adapter Pattern: 当不需要实现一个接口提供的所有方法时,可先设计一个抽象类实现该接口,并为接口中的每个方法提供一个默认空实现,那么该抽象类的子类就可以选择性覆盖父类中的方法。

缺省适配吗模式结构图如下所示:

7.6 双向适配器

在对象适配器的使用过程中,如果适配器类同时包含目标类和适配者类的引用,适配者类可以通过它调用目标i类的方法,目标类也可以通过它调用适配者类的方法,那么该适配器就是一个双向适配器

双向适配器的结构图如下所示:

7.7 适配器模式的优/缺点

适配器模式的优点主要如下:

  • 将目标类和适配者类解耦,通过引入一个新的适配器类来重用现有的适配者类
  • 将具体业务实现封装在适配者类中,增加类的透明性和复用性
  • 增加/删除 适配器类无须修改原有代码,符合开闭原则
  • 对象适配器可以适配多个适配者类,通过关联实现

类适配器模式的缺点主要如下:

  • 该模式通过继承实现,Java不支持多重继承,因此类适配器模式只能适配一个类

对象适配器模式的缺点主要如下:

  • 该模式下置换适配者类的方法比较麻烦,既需要修改适配者类,也需要修改适配器类

标签:Adapter,Java,适配,适配器,模式,void,设计模式,public
From: https://www.cnblogs.com/ylyzty/p/16758783.html

相关文章

  • 详解 File、Path、Paths、Files 四个类,Java操作文件不再难
    titleshortTitlecategorytagdescriptionhead详解File、Path、Paths、Files四个类,Java操作文件不再难详解File、Path、Paths、FilesJava核心Ja......
  • java字符流
    字符流java.io.Reader:字符输入流的父类,是一个抽象类共有的方法:intread()读取单个字符并返回intread(char[]cbuf)一次读取多个字符,将字符读入数组voidclos......
  • JavaScript之无题之让人烦躁的模块化
    我怎么记得我好像写过相关类型的文章,但是我找遍了我的博客没有~那就再写一遍吧,其实模块化的核心内容也算不上是复杂,只不过需要整理一下,规划一下罢了。嘻嘻。开始写......
  • java高并发、高可用、高可靠微服务架构7大顶级设计思维模型
    前段时间一个初创公司的老板带着他们的技术负责人来做技术交流,他们列了一长串问题,有微服务技术选型方面的,有技术难点方面的。这些问题如果不能快速解决,那么就会影响产品......
  • 最优雅的Java字符串拼接是哪种方式?
    titleshortTitlecategorytagdescriptionhead最优雅的Java字符串拼接是哪种方式?Java字符串拼接Java核心数组&字符串Java程序员进阶之路,小白......
  • 【35kJava开发岗:MQ篇】
    ​​系列文章:文章以35k为备战面试背景,薪资参考坐标:上海;参考时间:2022-07;每个地方,每个时间段薪资待遇都不一样,文章仅做面试参考,具体能否谈到35k取决于面试表现和平时的积累。......
  • 【35kJava开发岗:基础篇】
    ​​系列文章:文章以35k为备战面试背景,薪资参考坐标:上海;参考时间:2022-07;每个地方,每个时间段薪资待遇都不一样,文章仅做面试参考,具体能否谈到35k取决于面试表现和平时的积累。......
  • JAVA百万年薪架构师视频课程 JAVA高端进阶精华
    说到程序员的薪资我想也就只有“传说中的架构师”的薪资是足够诱惑到大家的,年薪40W-80W对于他们来说是比较简单的一件事,今天我们就来聊聊“架构师”。架构师是一个充满......
  • JAVA核心
    字符串String的创建机理是什么?什么是字符串常量池?创建机理:由于String在Java世界中使用过于频繁,为了提高内存的使用率,避免开辟多块空间存储相同的字符串,引入了字符串常量......
  • 告别编码5分钟,命名2小时!史上最全的Java命名规范参考!
    简洁清爽的代码风格应该是大多数工程师所期待的。在工作中笔者常常因为起名字而纠结,夸张点可以说是编程5分钟,命名两小时!究竟为什么命名成为了工作中的拦路虎。每个公司都......