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

适配器设计模式:基础解析与应用实例

前言

  • 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
    • 简单理解:设计模式就是各种套路
  • 适配器设计模式:解决接口与接口实现类之间的矛盾问题

需求分析

在实际开发过程中,当一个接口中抽象方法过多,但是我们只要使用其中一部分的时候,就可以使用适配器设计模式来实现代码(如果不使用适配器模式,一个非抽象类实现了这个接口,必须重写接口中的所有抽象方法)。 

 书写步骤

  • 编写中间类XXXAdapter,实现对应的接口
  • 对接口中的抽象方法进行空实现
// 动物接口  
public interface Animal {  
    void makeSound();  
    void move();  
}
  • 让真正的实现类继承中间类,并重写需要用的方法
  • 为了避免其他类创建适配器类的对象,中间的适配器类用abstract进行修饰

案例实现

创建一个名为 Animal 的接口,一个具体的实现类 Dog,以及一个适配器 AnimalAdapter。我们的目标是让 Dog 类适配到 Animal 接口,但 Dog 类本身并不直接实现 Animal 接口。我们将使用一个抽象的中间类 AnimalAdapter 来实现这一目的。

 Aminal接口:

// 动物接口  
public interface Animal {  
    void makeSound();  
    void move();  
}

Dog类:

// 狗类  
public class Dog {  
  public void bark() {  
        System.out.println("Woof! Woof!");  
    }  
  
    public void run() {  
        System.out.println("The dog is running.");  
    } 

}

AnimalAdapter抽象适配器类:

  • 设计为抽象类的目的是防止其他类创建适配器对象(因为适配器本身没有意义,只是用来适配,如果被创建出来对象是不正常的一种体现)。
  • 抽象适配器类 AnimalAdapter,它实现了 Animal 接口,但方法都是空实现。
// 动物适配器抽象类  
public abstract class AnimalAdapter implements Animal {  
    // 空实现  
    @Override  
    public void makeSound() {  
        // 这个方法需要在子类中实现  
    }  
  
    // 空实现  
    @Override  
    public void move() {  
        // 这个方法需要在子类中实现  
    }  
}

DogAdapter适配器类:

适配器类 DogAdapter,它继承自 AnimalAdapter 并重写需要的方法

// 狗适配器类  
public class DogAdapter extends AnimalAdapter {  
    private Dog dog;  
  
    public DogAdapter(Dog dog) {  
        this.dog = dog;  
    }  
  
    @Override  
    public void makeSound() {  
        // 调用Dog类的bark方法  
        dog.bark();  
    }  
  
    @Override  
    public void move() {  
        // 调用Dog类的run方法  
        dog.run();  
    }  
}

测试

// 测试类  
public class AdapterPatternDemo {  
    public static void main(String[] args) {  
        // 创建一个Dog实例  
        Dog dog = new Dog();  
  
        // 创建一个DogAdapter实例,将Dog适配到Animal接口  
        Animal animal = new DogAdapter(dog);  
  
        // 使用Animal接口的方法来调用Dog的方法  
        animal.makeSound(); // 输出: Woof! Woof!  
        animal.move();      // 输出: The dog is running.  
    }  
}

这样我们就可以针对需要的接口方法进行实现,增加了代码的扩展性和维护性。


http://www.kler.cn/a/354116.html

相关文章:

  • 拉普拉斯分布极大似然估计
  • es快速扫描
  • linux系统上SQLPLUS的重“大”发现
  • 目录jangow-01-1.0.1靶机
  • Java预加载
  • 数据可视化echarts学习笔记
  • AI能否颠覆转化医学研究?|行业前沿
  • 2.6.ReactOS系统中从内核中发起系统调用
  • QT 实现按钮多样化
  • 985研一学习日记 - 2024.10.16
  • react18中如何监听localstorage的变化获取最新的本地缓存
  • 使用虚拟机能干什么?
  • ZBrush和3D-Coat各自的优缺点是什么?
  • React 前端框架:强大的构建用户界面工具
  • 数学考研错题本:查漏补缺,高效提升备考策略
  • 前端_005_Nodejs
  • AUTOSAR_EXP_ARAComAPI的5章笔记(14)
  • openrtp 音视频时间戳问题
  • sankey.top - 桑基图/桑吉图/流程图/能量流/物料流/能量分析
  • 编写Python 自动化安装openGauss 数据库方法和代码 (1)
  • Flink状态一致性保证
  • Ansible概述
  • 滚雪球学Redis[6.3讲]:Redis分布式锁的实战指南:从基础到Redlock算法
  • Applied Spatial Statistics(九)GWR示例
  • ip地址的配置
  • 最新仿蓝奏网盘系统源码 附教程