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

本文介绍了使用Java实现适配器模式来整合快速排序和二分查找算法。适配器类`SuanFaAdapter`通过实例化`QuickSort`和`BinarySearch`,实现了`DataOperation`接口中的排序和查找方法。适配器模式的优点在于解耦了目标类和适配者类,提高了代码的复用性和灵活性,但同时也存在限制,如只能适配一个适配者且适配者不能作为最终类。
摘要由CSDN通过智能技术生成

欢迎大家加入我的社区:http://t.csdn.cn/Q52km
社区中不定时发红包

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

在这里插入图片描述

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿_小郑.

整理不易、多谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值