6.适配器模式-组合模式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10. 适配器模式
现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法。现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。绘制类图并编程实现。(要求实现快速排序和二分查找)
interface DataOperation{
---;
---;
}
class QuickSort{
public int[] quickSort(int[] num){
return sort(num,0,num.length-1);
}
private int[] sort(int[] num,int left,int right){
if(left < right){
//将第一个数作为参照轴
int s = num[left];
int i = left;
int j = right+1;
while(true){
//从左向右找,直到找到比S大的数
while(i+1 //从右向左找,直到找到比S小的数 while(j-1>-1 && num[--j]>s); //此时如果i>=j,则说明已交叉,跳出该永久循环 if(i >= j){ break; } //否则如果i<=j,则交换下标为i和下标为j的两元素的值 swap(num,i,j); } //把比S小的数放到下标为left处 num[left] = num[j]; //最后将轴S置于比它小和比它大的两组数之间 num[j] = s; //对S的左右两侧分别再次使用快速排序 sort(num,left,j-1); sort(num,j+1,right); } return num; } private void swap(int[] num,int i,int j){ int t; t = num[i]; num[i] = num[j]; num[j] = t; } } class BinarySearch{ public int binarySearch(int[] num,int x){ int low = 0; int high = num.length - 1; while(low <= high){ //此时抛出ArrayIndexOutOfBoundsException 异常.. int mid = low + (high - low)/2; int midVal = num[mid]; if(x > midVal){ low = mid + 1; }else if (x < midVal){ high = mid - 1; }else{ return mid; } } return -1; //没找到元素x } } ---{ QuickSort quickSort=new QuickSort(); BinarySearch binarySearch =new BinarySearch(); @Override public int search(int[] list, int number) { return---; } @Override public void sort(int[] list) { ---; } } class DataOperationClient{ public static void main(String a[]) { ---;//适配器DataOperationAdapter int[] list={1,3,56,23,54,86,43,57,88,56,82,90}; System.out.println("List before sort: "); for(int i=0;i System.out.print(list[i]+" "); } ---; System.out.println("\nList after sort: "); for(int i=0;i System.out.print(list[i]+" "); } int number=43; int index=---; System.out.println("\nSearch for: "+number+ ", Position is:"+index); } } 运行结果: 12. 组合模式 使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、音频视频文件MediaFile。绘制类图并编程实现。 import java.util.ArrayList; interface AbstractElement { ----; } class ImageFile implements AbstractElement { ----; public ImageFile(String filename) { ----; } public void display() { System.out.println("Image file " + filename + " is killing virus!"); } } class TextFile implements AbstractElement { ----;