现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法

简介: 该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。

现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法

1、UML类图

在这里插入图片描述


2、源码:

package com.back.zheng;

public interface DataOperation {
   
   
    public void sort(int data[]);//排序方法
    public void search(int[] list,int key);//查找方法

}

package com.back.zheng;

public class SuanFaAdapter implements DataOperation {
   
   
    private QuickSort quicksort; // 定义适配者QuickSort的对象
    private BinarySearch binarysearch; // 定义适配者 BinarySearch的对象
    // 构造函数初始化适配者对象

    public SuanFaAdapter() {
   
   
        quicksort = new QuickSort(); // 实例化QuickSort对象
        binarysearch = new BinarySearch(); // 实例化 BinarySearch对象
    }

    @Override
    public void sort(int data[]) {
   
   
        // 建立连接实现快速排序
        quicksort.quickSort(data);// 通过对象调用实现快速排序的功能

    }

    @Override
    public void search(int[] list, int key) {
   
   
        // 建立连接实现二分查找
        binarysearch.binarySearch(list, key);// 通过对象调用实现二分查找的功能

    }

}

package com.back.zheng;

public class QuickSort {
   
   
    //快速排序
    public void quickSort(int data[]) {
   
   
        java.util.Arrays.sort(data);    //直接调用排序方法
        print(data);
    }   
    //数组输出

    public void print(int data[]) {
   
   
        for(int x=0;x<data.length;x++) {
   
   
            System.out.print(data[x]+"、");
        }
    }

}

package com.back.zheng;

public class BinarySearch {
   
   
    // 二分查找
    public void binarySearch(int[] list,int key) {
   
   
        // 调用java.util.Arrays的binarySearch二分查找方法
        System.out.print(java.util.Arrays.binarySearch(list, key));
    }

}

package com.back.zheng;

public class Client {
   
   

    public static void main(String[] args) {
   
   
        // TODO 自动生成的方法存根
        //定义一个数组
        int data[]=new int[] {
   
   2,4,1,5,3,8,6,7};
        DataOperation operation;    //定义接口对象
        operation=new SuanFaAdapter();    //    实例化接口对象向上转型
        System.out.println("排序前的数组:");
        for(int i=0;i<data.length;i++) {
   
   
            System.out.print(data[i]+"、");
        }

        System.out.println("\n\n排序后的数组");
        operation.sort(data);//调用排序
        //查找数据4所在的下表
        System.out.println("\n\n输出数字4所在的索引:");
        operation.search(data,4);//调用查找

    }

}

3、优缺点分析

优点:1、将目标类和适配者类解耦。2、增加了类的透明性和复用性,通过一个适配器可以重用现有的适配者类。3、灵活性和扩展性好,符合开闭原则。
缺点:1、对于java、c++等不支持多重继承的语言,一次最多只能适配一个适配者。2、适配者不能作为最终类。3、在java等语言中类适配器的目标抽象类必须是接口,不能为类。

在这里插入图片描述

相关文章
|
19天前
|
搜索推荐 C语言
【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)
本文介绍了快速排序的升级版——三路快排。传统快速排序在处理大量相同元素时效率较低,而三路快排通过将数组分为三部分(小于、等于、大于基准值)来优化这一问题。文章详细讲解了三路快排的实现步骤,并提供了完整的代码示例。
45 4
|
2月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
35 4
|
2月前
|
机器学习/深度学习 算法
让星星⭐月亮告诉你,HashMap之tableSizeFor(int cap)方法原理详解(分2的n次幂和非2的n次幂两种情况讨论)
`HashMap` 的 `tableSizeFor(int cap)` 方法用于计算一个大于或等于给定容量 `cap` 的最小的 2 的幂次方值。该方法通过一系列的无符号右移和按位或运算,逐步将二进制数的高位全部置为 1,最后加 1 得到所需的 2 的幂次方值。具体步骤包括: 1. 将 `cap` 减 1,确保已经是 2 的幂次方的值直接返回。 2. 通过多次无符号右移和按位或运算,将最高位 1 后面的所有位都置为 1。 3. 最终加 1,确保返回值为 2 的幂次方。 该方法保证了 `HashMap` 的数组容量始终是 2 的幂次方,从而优化了哈希表的性能。
33 1
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
68 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
24 1
|
2月前
|
搜索推荐 Java Go
深入了解快速排序算法
深入了解快速排序算法
39 2
|
2月前
|
人工智能 算法 前端开发
无界批发零售定义及无界AI算法,打破传统壁垒,累积数据流量
“无界批发与零售”是一种结合了批发与零售的商业模式,通过后端逻辑、数据库设计和前端用户界面实现。该模式支持用户注册、登录、商品管理、订单处理、批发与零售功能,并根据用户行为计算信用等级,确保交易安全与高效。
|
2月前
|
存储 搜索推荐 算法
【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
|
2月前
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
|
2月前
|
搜索推荐 C语言 C++
【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)
【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)