设计模式练习(6)——适配器模式

设计模式练习(6)——适配器模式
适配器模式
⼀、题⽬:
某OA系统需要提供⼀个加密模块,将⽤户机密信息(如⼝令、邮箱等)加密之后,存储在数据库中,系统已经定义好了数据库操作类,为了提⾼开发效率,现需要重⽤已有的加密算法,这些加密算法封装在由第三⽅提供的类中,有些甚⾄没有源代码,试使⽤适配器模式,设计该模块,在不修改现有类的基础上,重⽤第三⽅加密算法。
现有⼀个接⼝DataOperation定义了排序算法sort(int []),和查⽅法search(int[],int),已知类QuikSort的quickSort⽅法实现了快速排序算法,类BinarySearch类的binarySearch(int[], int)实现了⼆分查法,现使⽤适配器模式设计⼀个系统,在不修改源代码的情况下将类,将QuickSort和类BinarySearch类的⽅法实适配到DataOperation接⼝。
(1)绘制适配器模式结构视图;
(2)请绘制该实例类图,并代码实现。
⼆、所⽤模式结构视图:
三、实例类图:
四、实例实现代码:
(因为区分,所以在类的前⾯加了Gj19)
抽象操作类:⽬标接⼝
package AdapterPattern;
/**
* 抽象操作类:⽬标接⼝
* @author gong
*
*/
public interface Gj19DataOperation {
public int[] sort(int array[]); //排序
public int search(int array[],int key); //查
}
操作适配器:适配器
1982年诺贝尔医学奖
package AdapterPattern;
/**
* 操作适配器:适配器
* @author gong
*
*/
public class Gj19OperationAdapter implements Gj19DataOperation {
private Gj19QuickSort sortObj; // 定义适配者Gj19QuickSort对象
private Gj19BinarySearch searchObj; // 定义适配者Gj19BinarySearch对象
public Gj19OperationAdapter() {
sortObj = new Gj19QuickSort();
searchObj = new Gj19BinarySearch();
}
public int[] sort(int array[]) {
return sortObj.quickSort(array); // 调⽤适配者类Gj19QuickSort的排序⽅法    }
public int search(int array[], int key) {
中国海洋渔船图集return searchObj.binarySearch(array, key); // 调⽤适配者类Gj19BinarySearch的查⽅法    }
}
快速排序类:适配者
*
*/
public class Gj19QuickSort {
public int[] quickSort(int array[]) {
sort(array,0,array.length-1);
return array;
}
public void sort(int array[],int p, int r) {
int q=0;
if(p<r) {
q=partition(array,p,r);
被动语态的构成
sort(array,p,q-1);
sort(array,q+1,r);
}
}
收费站public int partition(int[] a, int p, int r) {
int x=a[r];
int j=p-1;
for (int i=p;i<=r-1;i++) {
if (a[i]<=x) {
j++;
swap(a,j,i);
}
}
swap(a,j+1,r);
return j+1;
}
public void swap(int[] a, int i, int j) {
int t = a[i];
谣言的特点a[i] = a[j];
a[j] = t;
}
}
⼆分查类:适配者
*
*/
public class Gj19BinarySearch {
public int binarySearch(int array[], int key) {
int low = 0;
int high = array.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
int midVal = array[mid];
if (midVal < key) {
low = mid + 1;
} else if (midVal > key) {
high = mid - 1;
} else {
return1; // 到元素返回1
}
}
return -1; // 未到元素返回-1
}
}
为了让系统具备良好的灵活性和可扩展性,我引⼊了⼯具类XMLUtil和配置⽂件
/
**
* 为了让系统具备良好的灵活性和可扩展性,我引⼊了⼯具类XMLUtil和配置⽂件
* @author gong
*/
import java.io.File;
l.parsers.DocumentBuilder;
l.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;油液分析
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Gj19XMLUtil {
/
/该⽅法⽤于从XML配置⽂件中提取具体类类名,并返回⼀个实例对象
public static Object getBean() {
try {
//创建⽂档对象
DocumentBuilderFactory dFactory = wInstance();
DocumentBuilder builder = wDocumentBuilder();
Document doc;
doc = builder.parse(new File("l"));
//获取包含类名的⽂本节点
NodeList nl = ElementsByTagName("className");
Node classNode=nl.item(0).getFirstChild();
String NodeValue();
//通过类名⽣成实例对象并将其返回
Class c=Class.forName(cName);
Object wInstance();
return obj;
}
catch(Exception e) {
e.printStackTrace();
return null;
}
}
}
XML配置⽂件
<?xml version="1.0" ?>
<config>
<className>AdapterPattern.Gj19OperationAdapter</className>
</config>
客户端测试类

本文发布于:2024-09-23 12:30:01,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/131701.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:适配器   模式   系统   对象   实例   操作   返回
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议