适配器模式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学号:
系统分析与设计
实验报告
实验题目:实验三适配器模式
学生姓名:
学院:信息数理学院专业班级:
指导教师:
时间: 2018 年 5 月 11 日
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
【实验目的】
掌握适配器模式的定义、结构及实现方式。
【实验内容】
在为某学校开发教务管理系统时,开发人员发现需要对学生成绩进行排序和查找,该系统的设计人员已经开发了一个成绩操作接口ScoreOperation ,在该接口中声明了排序方法Sort(int[]) 和查找方法Search(int[], int),为了提高排序和查找的效率,开发人员决定重用现有算法库中的快速排序算法类QuickSortClass 和二分查找算法类BinarySearchClass ,其中QuickSortClass 的QuickSort(int[])方法实现了快速排序,BinarySearchClass 的BinarySearch (int[], int)方法实现了二分查找。
由于某些原因,开发人员已经找不到该算法库的源代码,无法直接通过复制和粘贴操作来重用其中的代码;而且部分开发人员已经针对ScoreOperation 接口编程,如果再要求对该接口进行修改或要求大家直接使用QuickSortClass 类和BinarySearchClass 类将导致大量代码需要修改。
现使用适配器模式设计一个系统,在不修改已有代码的前提下将类QuickSortClass 和类BinarySearchClass 的相关方法适配到ScoreOperation 接口中。 REF
适配器模式包含以下3个角色: Target (目标抽象类) Adapter (适配器类) Adaptee (适配者类)
//ScoreOperation.cs
using System;
namespace project
{
interface ScoreOperation
{
int[] Sort(int[] array);
int Serach(int[] array, int key);
}
}
//QuickSortClass.cs
namespace project
{
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 { 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; } } } //BinarySearchClass.cs namespace project { class BinarySerachClass { 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 { return 1; } } return -1; } } }