在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——Gang of Four
基本概念
客户:需要调用我们的代码的对象。
Adapter模式的宗旨:保留现有类所提供的服务,向客户提供接口,以满足客户的期望。
主要内容
(1)类适配器:
当客户在接口中定义了他期望的行为时,我们就可以应用适配器模式,提供一个实现该接口的类,并且扩展已有的类,通过创建子类来实现适配。
下面是类适配器的UML图:
(2)对象适配器:
对象适配器”通过组合除了满足“用户期待接口”还降低了代码间的不良耦合。在工作中推荐使用“对象适配”。下面是对象适配器的UML图:
(3) 缺省适配器模式:
缺省适配器模式是一种特殊的适配器模式,但这个适配器是由一个抽象类实现的,并且在抽象类中要实现目标接口中所规定的所有方法,但很多方法的实现都是“平庸”的实现,也就是说,这些方法都是空方法。而具体的子类都要继承此抽象类。
结构型模式之对象适配器模式
现有一个接口DataOperaTIon定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch的binarySearch(int[],int)方法实现了二分查找算法。现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperaTIon接口中。绘制类图并编程实现。
代码
[java] view plain copypackage 适配器模式实例之算法适配;
public interface DataOperaTIon { //目标类
public void sort(int sort[], int i, int j);
public int search(int search[], int n);
}
[java] view plain copypackage 适配器模式实例之算法适配;
public class AlgoTIthmAdapter implements DataOperation{ //适配器类
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++) {
if (array[j] 《= x) {
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) {
int middle = (low + high)/2;
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)+“位”);
}
}
上一篇:适配器模式和装饰模式的区别
下一篇:适配器模式的优缺点
推荐阅读最新更新时间:2023-10-12 23:00
Vishay线上图书馆
- 选型-汽车级表面贴装和通孔超快整流器
- 你知道吗?DC-LINK电容在高湿条件下具有高度稳定性
- microBUCK和microBRICK直流/直流稳压器解决方案
- SOP-4小型封装光伏MOSFET驱动器VOMDA1271
- 使用薄膜、大功率、背接触式电阻的优势
- SQJQ140E车规级N沟道40V MOSFET
- MathWorks 和 NXP 合作推出用于电池管理系统的 Model-Based Design Toolbox
- 意法半导体先进的电隔离栅极驱动器 STGAP3S为 IGBT 和 SiC MOSFET 提供灵活的保护功能
- 全新无隔膜固态锂电池技术问世:正负极距离小于0.000001米
- 东芝推出具有低导通电阻和高可靠性的适用于车载牵引逆变器的最新款1200 V SiC MOSFET
- 【“源”察秋毫系列】 下一代半导体氧化镓器件光电探测器应用与测试
- 采用自主设计封装,绝缘电阻显著提高!ROHM开发出更高电压xEV系统的SiC肖特基势垒二极管
- 艾迈斯欧司朗发布OSCONIQ® C 3030 LED:打造未来户外及体育场照明新标杆
- 氮化镓取代碳化硅?PI颠覆式1700V InnoMux2先来打个样
- 从隔离到三代半:一文看懂纳芯微的栅极驱动IC