当前位置:文档之家› 适配器模式

适配器模式

学号:系统分析与设计实验报告实验题目:实验三适配器模式学生姓名:学院:信息数理学院专业班级:指导教师:时间: 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 : voidBinarySearchClass+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.csusing System;namespace project{interface ScoreOperation{int[] Sort(int[] array);int Serach(int[] array, int key);}}//QuickSortClass.csnamespace 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<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;}}}//BinarySearchClass.csnamespace 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;}}}//OperationAdapter.csnamespace project{class OperationAdapter :ScoreOperation{private QuickSortClass sortObj;private BinarySerachClass searchObj;public OperationAdapter(){sortObj = new QuickSortClass();searchObj = new BinarySerachClass();}public int[] Sort(int[] array){return sortObj.QuickSort(array);}public int Search(int[] array, int key){return searchObj.BinarySearch(array, key);}}}//App.config<?xml version="1.0" encoding="utf-8" ?><configuration><appSettings><add key="adapter" value="project.OperationAdapter"/> </appSettings></configuration>//Program.csnamespace project{class Program{static void Main(string[] args){ScoreOperation operation;string adapterType = ConfigurationSettings.AppSettings["adapter"];operation = (ScoreOperation)Assembly.Load("demoshipeqi").CreateInstance(adapterType);int[] scores = { 84, 76, 50, 69, 90, 91, 88, 96 };int[] result;int score;Console.WriteLine("成绩排序结果:");result = operation.Sort(scores);foreach (int i in result){Console.Write(i + ",");}Console.WriteLine();Console.WriteLine("查找成绩:90");score = operation.Serach(result, 90);if (score != -1){Console.WriteLine("找到成绩:90.");}else{Console.WriteLine("没有找到成绩:90");}Console.WriteLine("查找成绩:92");score = operation.Serach(result, 92);if (score != -1){Console.WriteLine("找到成绩:92");}else{Console.WriteLine("没有找到成绩:92");}Console.Read();}}}运行结果:【实验总结】适配者模式增加了类的的透明性和复用性,对于客户端是透明的对于适配者来说提高了复用性,同一个复用者可以在多个类中进行使用。

提高了扩展性,一个对象适配器可以把多个不同的适配者适配到同一个目标。

对于c#等不支持多继承的语言来说,一次最多只能适配一个类,不能同时适配多个适配者。

相关主题