6.适配器模式-组合模式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

{

----;

相关文档
最新文档