实验(上机)六 适配器模式
实验(上机)目的
1、 练习使用结构型设计模式;
2、 练习使用适配器模式的设计思路;
3、 练习使用适配器模式实现“教务学生成绩排序查找”案例的实现。 实验(上机)课时 2学时
实验(上机)环境
JDK1.8\\Eclipse Mars 预备知识
1、结构型模式; 2、适配器模式概述;
3、适配器模式的结构与实现; 4、适配器模式的应用实例; 5、缺省适配器模式; 6、双向适配器模式;
7、适配器模式的优缺点与适用环境。
实验(上机)内容
在为某学校开发教务管理系统时,开发人员发现需要对学生成绩进行排序和查找,该系统的设计人员已经开发了一个成绩操作接口ScoreOperation,在该接口中声明了排序方法Sort(int[]) 和查找方法Search(int[], int),为了提高排序和查找的效率,开发人员决定重用现有算法库中的快速排序算法类QuickSortClass和二分查找算法类BinarySearchClass,其中QuickSortClass的QuickSort(int[])方法实现了快速排序,BinarySearchClass的BinarySearch (int[], int)方法实现了二分查找。
由于某些原因,开发人员已经找不到该算法库的源代码,无法直接通过复制和粘贴操作来重用其中的代码;而且部分开发人员已经针对ScoreOperation接口(自己开发的接口)编程,如果再要求对该接口进行修改或要求大家直接使用QuickSortClass类和BinarySearchClass类将导致大量代码需要修改。
现使用适配器模式设计一个系统,在不修改已有代码的前提下将类QuickSortClass和类BinarySearchClass的相关方法适配到ScoreOperation接口中。
新建解决方案,新建一个控制台应用程序,编写适配器模式类实现代码,实
现以上需求的案例,要求编写为控制台应用程序,并能调试运行。
实验(上机)步骤
1、 本实例类图:
ClientScoreOperation+Sort (int[] array): int[]+Search (int[] array, int key): int...QuickSortClass++++QuickSort (int[] array)Sort (int[] array, int p, int r)Partition (int[] a, int p, int r)Swap (int[] a, int i, int j)...: int[]: void: int: voidOperationAdapter-sortObj: QuickSortClass-searchObj: BinarySearchClass+OperationAdapter ()+Sort (int[] array): int[]+Search (int[] array, int key): int...BinarySearchClass+BinarySearch (int[] array, int key): int... 2、 创建Adapter的工程,并根据模式的角色创建对应的包。
3、 新建ScoreOperation:抽象成绩操作类,充当目标接口 package Target;
public interface ScoreOperation {
// 成绩操作类:用户希望的接口方法
// 成绩排序
int[] Sort(int[] array); // 成绩查找
int Search(int[] array, int key); }
4、 新建QuickSortClass:快速排序类,充当适配者 package Adaptee;
public class QuickSortClass {
// 快速排序类
// 实现对数组的快速排序
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; }
5、 新建BinarySearchClass:二分查找类,充当适配者
package Adaptee;
public class BinarySearchClass {
// 二分查找,如果找到,返回1,找不到返回-1 // //
public int BinarySearch(int[] array, int key) { int low = 0;
int high = array.length - 1; while (low <= high) {