一起学java设计模式--适配器模式(结构型模式)
来源:互联网 发布:论文spss数据分析例子 编辑:程序博客网 时间:2024/05/14 22:53
适配器模式
现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法。现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。绘制类图并编程实现。 (要求实现快速排序和二分查找)
编码实现:
interface DataOperation{void sort(int[] list);int search(int[] list, int number);}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<num.length && num[++i]<s);//从右向左找,直到找到比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}}class DataOperationAdpter implements DataOperations{QuickSort quickSort=new QuickSort();BinarySearch binarySearch =new BinarySearch();@Overridepublic int search(int[] list, int number) {return binarySearch.binarySearch(list, number);}@Overridepublic void sort(int[] list) {quickSort.quickSort(list); }}class DataOperationClient{public static void main(String a[]){ //适配器 DataOperationAdapterDataOperation dataAdpter = new DataOperationAdpter();int[] list={1,3,56,23,54,86,43,57,88,56,82,90};System.out.println("排序前的数据: ");for(int i=0;i<list.length;i++){System.out.print(list[i]+" ");} dataAdpter.sort(list);System.out.println("\n排序后的数据: ");for(int i=0;i<list.length;i++){System.out.print(list[i]+" ");}int number = 56;int index = dataAdpter.search(list, number);System.out.println("\n要查找的数据: "+number+ ", 所在下标:"+index);}
运行结果:
0 0
- 一起学java设计模式--适配器模式(结构型模式)
- 一起学java设计模式--代理模式(结构型模式)
- 设计模式--结构模式--适配器模式--Java
- 设计模式 - 结构型模式 - 适配器模式
- 设计模式->结构型模式->适配器模式
- 结构型设计模式---适配器
- 设计模式-结构型-适配器
- java设计模式(结构型)之适配器模式
- java语言实现结构型设计模式—适配器模式
- JAVA设计模式(6) —<结构型>适配器模式(Adapter)
- java设计模式——结构型之适配器模式
- Java设计模式之适配器模式Adapter(结构型)
- Java设计模式(6)结构型:适配器模式
- Java设计模式_(结构型)_适配器模式
- java结构型设计模式——适配器模式
- 设计模式-结构型模式-适配器
- 适配器模式(结构型设计模式)
- 设计模式--结构型--适配器模式
- Spring中的HibernateDaoSupport
- 长度可变参数
- 递归算法1-汉诺塔问题
- jQuery+CSS3旋转幻灯片代码
- Go 切片 引用类型说明
- 一起学java设计模式--适配器模式(结构型模式)
- select for update nowait 与 select for update 区别
- Direct 窗口模式(非独占模式)贴图操作
- BNU 29373 Key Logger
- 主键自增Id的弊端
- http://jackielieu.blog.51cto.com/5586910/1161944
- jquery隐藏按钮
- mybatis大于小于及其它 运算符操作
- android项目中如何加载已有so库 <转>