首页 > 编程语言 >Java设计模式的学习之适配器模式

Java设计模式的学习之适配器模式

时间:2024-10-23 18:42:35浏览次数:1  
标签:Java 适配 适配器 OldClass 模式 oldClass 接口 设计模式

适配器模式


目录

适配器模式(Adapter Pattern)是一种结构型设计模式,其主要目的是将一个类的接口转换成客户端期望的另一个接口,使得原本因接口不兼容而不能一起工作的类可以一起工作。适配器模式通常用于实现类之间的兼容,让它们可以无缝地协同工作。

适配器模式的主要角色包括:

  1. Target(目标接口):定义了客户端所期望的接口。
  2. Adaptee(被适配者):定义了被适配者已有的接口,这个接口需要被适配以符合目标接口。
  3. Adapter(适配器):对Adaptee的接口进行适配,以符合Target接口。适配器类是适配器模式的核心,它实现了目标接口,并且包含了一个Adaptee的实例。

适配器模式的两种主要形式:

  1. 类适配器模式:通过多重继承将适配器和被适配者结合起来。在Java中,由于不支持多重继承,通常使用组合的方式来实现类适配器模式。
  2. 对象适配器模式:通过组合的方式,将Adaptee的实例作为Adapter的一个成员变量,从而实现适配。

应用场景:

  1. 系统需要使用一些现有的类,而这些类的接口不符合系统的需要:在这种情况下,可以创建一个适配器类,将这些类的接口转换成系统需要的接口。
  2. 想要建立一个可重复使用的类,用来与一些彼此之间没有太大关系的类一起工作,包括一些可能在将来引进的类:适配器模式可以提供统一的接口,使得这些类可以被统一处理。
  3. 在这种情况下,不希望修改现有的类:适配器模式可以在不修改现有类的情况下,通过引入一个中间层来实现接口的转换。
  4. 需要统一多个类的接口,特别是当控制源代码,或者重构系统时:适配器模式可以帮助统一不同类的接口,使得它们可以被统一处理。

优点:

  • 提高类的复用性:适配器模式可以让那些接口不兼容的类可以一起工作,从而提高了类的复用性。
  • 提高系统的灵活性:通过引入一个中间层来实现接口的转换,使得系统更加灵活。
  • 解耦:适配器模式将目标接口和适配者接口解耦,增加代码的可维护性。

缺点:

  • 增加系统的复杂性:引入适配器类可能会增加系统的复杂性,特别是当存在多个适配器类时。
// 旧的类
class OldClass {
    // 旧的方法
    public void oldMethod() {
        System.out.println("Old method called.");
    }
}

// 客户端代码
public class SimpleAdapterDemo {
    public static void main(String[] args) {
        // 创建旧的类实例
        OldClass oldClass = new OldClass();

        // 直接使用旧的类调用方法
        oldClass.oldMethod();
    }
}

改为适配器模式后:

// 新的接口  
interface NewInterface {  
    void newMethod();  
}  
  
// 旧的类  
class OldClass {  
    // 旧的方法  
    public void oldMethod() {  
        System.out.println("Old method called.");  
    }  
}  
  
// 适配器类,将OldClass适配为NewInterface  
class Adapter implements NewInterface {  
    private OldClass oldClass;  
  
    public Adapter(OldClass oldClass) {  
        this.oldClass = oldClass;  
    }  
  
    @Override  
    public void newMethod() {  
        // 适配:调用OldClass的旧方法  
        oldClass.oldMethod();  
    }  
}  
  
// 客户端代码  
public class SimpleAdapterDemo {  
    public static void main(String[] args) {  
        // 创建旧的类实例  
        OldClass oldClass = new OldClass();  
  
        // 创建适配器,将旧的类适配为新的接口  
        NewInterface newInterface = new Adapter(oldClass);  
  
        // 使用新的接口调用方法  
        newInterface.newMethod();  
    }  
}

标签:Java,适配,适配器,OldClass,模式,oldClass,接口,设计模式
From: https://www.cnblogs.com/BingBing-8888/p/18498059

相关文章

  • JavaScript:三、数据类型
    JavaScript:三、数据类型JavaScript将数据类型分为两大类,分别是基本数据类型(或称为值类型)和复杂数据类型(或称为引用类型)。值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。引用数据类型(对象类型):对象(Object)、数组(Array)......
  • JavaScript: 二、基本语法
    目录2.1变量以及命名规则2.2变量的声明与赋值2.3声明变量(varletconst)2.3.1Var 2.3.2let2.3.3const2.3.4总结2.1变量以及命名规则变量是程序在内存中申请的一块用来存放数据的空间。变量由变量名和变量值组成,通过变量名可以访问变量的值。命名规则(1)不能......
  • 第一个Java spring boot demo运行
     一、环境准备1,下载JavaJDK需要安装两个JDK版本:1.8/17安装ZuluJDK(不能使用OracleJDK)JDK17:https://www.azul.com/downloads/?version=java-17-lts&os=macos&package=jdk#zuluJDK8:https://www.azul.com/downloads/?version=java-8-lts&os=macos&package=jdk#zul......
  • JavaScript中的文件
    裁剪图片原理:借助Canvas,绘制圆形路径,裁剪,填充图片/***@description:裁剪图片变为圆形*@return{Promise}*@param{String}url:普通路径*/exportconstclipImageUrl=(url)=>{returnnewPromise((resolve,reject)=>{letimage=newImage......
  • java 脚本使用不同版本jdk说明
    目录1.使用ScriptEngine执行JavaScript2.Nashorn(JDK8及以上)和工具类3.GraalVM(JDK11及以上)总结在Java中,运行或执行JavaScript脚本有几种方式,其中最常用的是通过Java内置的JavaScript引擎(Nashorn或者Rhino)来执行JavaScript代码。下面介绍几种实现方式。1.使用Scrip......
  • java基于springboot的中药材进存销管理系统(源码+vue+部署文档+前后端分离等)
    收藏关注不迷路!!......
  • Javascript数据类型及转换
    Javascript代码引入方式同HTML相似分为行内式、内嵌式、外链式    1.行内式:行内式是将JavaScript代码作为HTML标签的属性值使用。<ahref="javascript:alert('Hello');">test</a>代码杂乱容易混淆不推荐    2.嵌入式:也称为内嵌式,使用<script>标签包......
  • 大厂面试Java工程师为什么总爱问Spring相关问题?
    因为Spring框架自从诞生以来就一直备受开发者青睐,很多Java程序员实质上就是Spring程序员,它涵盖了Spring、Springboot、SpringCloud等诸多解决方案,一般我们都会统称为Spring全家桶!出于Spring框架在Java开发者心中中的统治地位,所以不管是面试还是工作,Spring都是绕不开的重点也是......
  • Java程序员换工作有必要刻意在金三银四或者金九银十吗?
    Java面试谈到Java面试,相信大家第一时间脑子里想到的词肯定是金三银四,金九银十。好像大家的潜意识里做Java开发的都得在这个时候才能出去面试,跳槽成功率才高!但LZ不这么认为,LZ觉得我们做技术的一生中会遇到很多大大小小的面试,金三银四(金九银十)只是机会比平时多一些,但也未必每个......
  • Java异常的处理:
    Java异常分成两个部分:“抛出异常”和"捕获异常"    Java异常处理机制是:将可能发生异常的语句写入try{}中,当try语句中发生异常时,系统会生成一个异常对象,该异常对象会提交给Java运行时环境,这个过程称为“抛出异常”。    当出现异常时,会去匹配可以处理异常的c......