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

简介: 该博客文章介绍了如何使用抽象工厂模式模拟电器工厂生产不同品牌和类型的电器,并通过UML类图和Java代码示例展示了具体实现过程。

现有一个接口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等语言中类适配器的目标抽象类必须是接口,不能为类。

在这里插入图片描述

相关文章
|
4月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
49 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
数组从排1,2,3,4,5,冒泡排序的写法 .sort,升序写法 arr.sort(function (a,b){return a - b})
数组从排1,2,3,4,5,冒泡排序的写法 .sort,升序写法 arr.sort(function (a,b){return a - b})
|
7月前
|
搜索推荐
实现bubble_sort冒泡排序函数,排序任意类型数据
实现bubble_sort冒泡排序函数,排序任意类型数据
56 0
|
7月前
|
存储 算法 Java
实现一个函数 splice(int[] a, int b[], int n, int m) 将数组 b 插入到数组 a 的第 n 个位置上去,并将其后面的元素后移 m 个位置,同时更新数组 a 的长度
实现一个函数 splice(int[] a, int b[], int n, int m) 将数组 b 插入到数组 a 的第 n 个位置上去,并将其后面的元素后移 m 个位置,同时更新数组 a 的长度
42 0
|
7月前
|
算法 Java C++
数据结构与算法面试题:实现一个函数 fill(int[] a, int n, int v),使其将大小为 n 的数组 a 填满为 v。
数据结构与算法面试题:实现一个函数 fill(int[] a, int n, int v),使其将大小为 n 的数组 a 填满为 v。
41 0
|
搜索推荐 C++
sort()函数详解
sort()函数详解
135 0
|
C++ 容器
C++ vector 删除和排序的相关函数
C++ vector 删除和排序的相关函数
92 0
|
算法 搜索推荐 编译器
排序函数qsort和sort那点事
排序函数qsort和sort那点事
150 0
|
Web App开发 算法 搜索推荐
数组的 sort() 方法详解
纸上得来终觉浅,绝知此事要躬行!
221 0
数组的 sort() 方法详解
关于LeetCode题目中形参《 int* nums,int** nums》可以接收什么值?《指针问题》
关于LeetCode题目中形参《 int* nums,int** nums》可以接收什么值?《指针问题》
关于LeetCode题目中形参《 int* nums,int** nums》可以接收什么值?《指针问题》