适配器模式实例之算法适配

网友投稿 268 2022-11-16

适配器模式实例之算法适配

基本概念

客户:需要调用我们的代码的对象。

Adapter模式的宗旨:保留现有类所提供的服务,向客户提供接口,以满足客户的期望。

主要内容

(1)类适配器:

当客户在接口中定义了他期望的行为时,我们就可以应用适配器模式,提供一个实现该接口的类,并且扩展已有的类,通过创建子类来实现适配。

下面是类适配器的UML图:

(2)对象适配器:

(3) 缺省适配器模式:

缺省适配器模式是一种特殊的适配器模式,但这个适配器是由一个抽象类实现的,并且在抽象类中要实现目标接口中所规定的所有方法,但很多方法的实现都是“平庸”的实现,也就是说,这些方法都是空方法。而具体的子类都要继承此抽象类。

结构型模式之对象适配器模式

类图

代码

public void sort(int sort[], int i, int j);

public int search(int search[], int n);

}

[java] view plain copypackage 适配器模式实例之算法适配;

private QuickSort quick;

private BinarySearch binary;

public AlgotithmAdapter(QuickSort quick) {

this.quick = quick;

}

public AlgotithmAdapter(BinarySearch binary) {

this.binary = binary;

}

public void sort(int sort[], int i, int j) {

quick.quickSort(sort, i, j);

}

public int search(int search[], int n) {

return binary.binarySearch(search, n);

}

}

[java] view plain copypackage 适配器模式实例之算法适配;

public class QuickSort { //适配者类

//划分数组

int partion(int array[], int p, int r) {

int x = array[r];

int i = p - 1;//注意这点,把i设成负值,然后作为移动的标志

int j;

for (j = p; j 《 r; j++) {

i++;

int temp = array[j];

array[j] = array[i];

array[i] = temp;

}

}

int temp = array[j];

array[j] = array[i + 1];

array[i + 1] = temp;

return i+1;//返回的应该是交换后的哨兵的位置

}

//递归解决每个划分后的小数组

void quickSort(int[] array, int p, int r) {

if (p 《 r) {

int q = partion(array, p, r);

quickSort(array, p, q - 1);

quickSort(array, q + 1, r);

}

}

}

[java] view plain copypackage 适配器模式实例之算法适配;

public class BinarySearch { //适配者类

public int binarySearch(int[] srcArray, int des){

int low = 0;

int high = srcArray.length-1;

while(low 《= high) {

if(des == srcArray[middle]) {

return middle;

}else if(des 《srcArray[middle]) {

high = middle - 1;

}else {

low = middle + 1;

}

}

return -1;

}

}

[java] view plain copypackage 适配器模式实例之算法适配;

public class Client { //客户端类

public static void main(String[] args) {

int[] array = { 4, 3, 5, 2, 3, 6, 8, 9, 18, 12, 53, 20};

int i;

System.out.print(“排序前:”);

for (i=0; i《array.length; i++)

System.out.print(array[i]+“ ”);

BinarySearch binary = new BinarySearch();

AlgotithmAdapter algotithm1 = new AlgotithmAdapter(binary);

System.out.println(“\n通过二分查找得到数字5:位于数组的第”+(algotithm1.search(array, 5)+1)+“位”);

QuickSort sort = new QuickSort();

AlgotithmAdapter algotithm2 = new AlgotithmAdapter(sort);

algotithm2.sort(array, 0, array.length - 1);

System.out.println(“------------------------------”);

System.out.print(“排序后:”);

for (i=0; i《array.length; i++)

System.out.print(array[i]+“ ”);

//int[] src = new int[] {1, 3, 5, 7, 8, 9};

System.out.println(“\n通过二分查找得到数字5:位于数组的第”+(algotithm1.search(array, 5)+1)+“位”);

}

}

运行效果图

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何使用ByteArrayOutputStream下载文件
下一篇:【数据分析师-数据分析项目案例三】多因素房价预测分析案例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~