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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

实验(上机)目的

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、本实例类图:

OperationAdapter

--sortObj

searchObj

: QuickSortClass

: BinarySearchClass

+ + +OperationAdapter ()

Sort (int[] array)

Search (int[] array, int key) ...

: int[]

: int

ScoreOperation

+ +Sort (int[] array)

Search (int[] array, int key)

...

: int[]

: 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

: void

BinarySearchClass

+BinarySearch (int[] array, int key)

...

: int

Client

2、创建Adapter的工程,并根据模式的角色创建对应的包。

3、新建ScoreOperation:抽象成绩操作类,充当目标接口

p ackage Target;

public interface ScoreOperation {

// 成绩操作类:用户希望的接口方法

// 成绩排序

int[] Sort(int[] array);

// 成绩查找

int Search(int[] array, int key);

}

4、新建QuickSortClass:快速排序类,充当适配者

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

相关文档
最新文档