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

在这里插入图片描述

相关文章
|
存储 NoSQL Java
SpringBoot 中使用 MongoDB 基于 MongoRepository增删改查(基础篇)
SpringBoot 中使用 MongoDB 基于 MongoRepository增删改查(基础篇)
1190 0
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
191 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
自然语言处理 算法 编译器
编译原理复习一:正则表达式-NFA NFA-DFA DFA最小化(附题目与答案 超详细)
编译原理复习一:正则表达式-NFA NFA-DFA DFA最小化(附题目与答案 超详细)
1098 0
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
592 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
SQL 分布式计算 监控
Flume实时读取本地/目录文件到HDFS
Flume实时读取本地/目录文件到HDFS
480 7
|
Java Spring
解决方案 --[restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. ERROR 9680 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter
|
Java
Java中抽象类和接口有什么区别?
本文阐述了Java中抽象类和接口的区别,包括类型扩展、方法/属性访问控制符、方法实现、使用目的等方面的不同,并提供了抽象类和接口的使用示例,以及Java中其他类型的类(普通类、内部类等)的简介。
1885 0
Java中抽象类和接口有什么区别?
|
人工智能 小程序 前端开发
小程序源码|幼教小程序源码
小程序源码|幼教小程序源码
1280 4
|
Ubuntu Linux Python
UserWarning: Glyph 27668 (\N{CJK UNIFIED IDEOGRAPH-6C14}) missing from current font.
UserWarning: Glyph 27668 (\N{CJK UNIFIED IDEOGRAPH-6C14}) missing from current font.
947 2
|
Java Spring
无效的目标发行版: 21 和springboot爆错
无效的目标发行版: 21 和springboot爆错
2415 1