软件设计模式(JAVA) 06_适配器模式_实验指导书 下载本文

内容发布更新时间 : 2024/5/21 3:26:05星期一 下面是文章的全部内容请认真阅读。

实验(上机)六 适配器模式

实验(上机)目的

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) {