适配器模式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

}

}

相关文档
最新文档