中南大学软件体系结构实验4 结构型设计模式实验.docx

上传人:b****0 文档编号:17254845 上传时间:2023-07-23 格式:DOCX 页数:39 大小:123.91KB
下载 相关 举报
中南大学软件体系结构实验4 结构型设计模式实验.docx_第1页
第1页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第2页
第2页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第3页
第3页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第4页
第4页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第5页
第5页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第6页
第6页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第7页
第7页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第8页
第8页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第9页
第9页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第10页
第10页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第11页
第11页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第12页
第12页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第13页
第13页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第14页
第14页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第15页
第15页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第16页
第16页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第17页
第17页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第18页
第18页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第19页
第19页 / 共39页
中南大学软件体系结构实验4 结构型设计模式实验.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

中南大学软件体系结构实验4 结构型设计模式实验.docx

《中南大学软件体系结构实验4 结构型设计模式实验.docx》由会员分享,可在线阅读,更多相关《中南大学软件体系结构实验4 结构型设计模式实验.docx(39页珍藏版)》请在冰点文库上搜索。

中南大学软件体系结构实验4 结构型设计模式实验.docx

中南大学软件体系结构实验4结构型设计模式实验

 

《软件体系结构》

实验报告

 

项目名称结构型设计模式实验

专业班级

学号

姓名

 

实验成绩:

批阅教师:

 

年月日

实验4结构型设计模式实验

实验学时:

2

每组人数:

1

实验类型:

3(1:

基础性2:

综合性3:

设计性4:

研究性)

实验要求:

1(1:

必修2:

选修3:

其它)

实验类别:

3(1:

基础2:

专业基础3:

专业4:

其它)

一、实验目的

熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的结构型设计模式,包括适配器模式、组合模式和外观模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。

二、实验内容

1.现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch的binarySearch(int[],int)方法实现了二分查找算法。

试使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。

绘制类图并编程实现。

(要求实现快速排序和二分查找,使用对象适配器实现)

2.WindowsMediaPlayer和RealPlayer是两种常用的媒体播放器,它们的API结构和调用方法存在区别。

现在你的应用程序需要支持这两种播放器API,而且在将来可能还需要支持新的媒体播放器,请问如何设计该应用程序?

绘制类图并编程模拟实现。

3.使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。

绘制类图并编程模拟实现。

4.某教育机构组织结构如下图所示:

在该教育机构的OA系统中可以给各级办公室下发公文,试采用组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。

5.某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功能可以将原本存储在手机中的通信录、短信、照片、歌曲等资料一次性全部拷贝到移动存储介质(例如MMC卡或SD卡)中。

在实现过程中需要与多个已有的类进行交互,例如通讯录管理类、短信管理类等,为了降低系统的耦合度,试使用外观模式来设计并编程模拟实现该一键备份功能。

6.某信息系统需要提供一个数据处理和报表显示模块,该模块可以读取不同类型的文件中的数据并将数据转换成XML格式,然后对数据进行统计分析,最后以报表方式来显示数据。

由于该过程需要涉及到多个类,试使用外观模式设计该数据处理和报表显示模块。

考虑到有些文件本身已经是XML格式,无须进行格式转换,为了让系统具有更好的扩展性,在系统设计中可以引入抽象外观类。

三、实验要求

1.结合实例,正确无误地绘制适配器模式、组合模式和外观模式的模式结构图;

2.使用任意一种面向对象编程语言实现适配器模式、组合模式和外观模式实例,代码运行正确无误。

四、实验步骤

1.结合实例,使用PowerDesigner绘制适配器模式实例结构图并用面向对象编程语言实现该模式实例;

2.结合实例,使用PowerDesigner绘制适配器模式实例结构图并用面向对象编程语言实现该模式实例;

3.结合实例,使用PowerDesigner绘制组合模式实例结构图并用面向对象编程语言实现该模式实例;

4.结合实例,使用PowerDesigner绘制组合模式实例结构图并用面向对象编程语言实现该模式实例;

5.结合实例,使用PowerDesigner绘制外观模式实例结构图并用面向对象编程语言实现该模式实例;

6.结合实例,使用PowerDesigner绘制外观模式实例结构图并用面向对象编程语言实现该模式实例。

五、实验结果

1.类图:

实现代码:

/***********************************************************************

*Module:

BinarySearch.java

*Author:

Administrator

*Purpose:

DefinestheClassBinarySearch

***********************************************************************/

importjava.util.*;

/**@pdOid209bdfa5-acff-485e-a496-d46862104c80*/

publicclassBinarySearch{

/**@paramarray

*@paramvalue

*@pdOidba1a5cd0-df22-4fb8-9ce7-bcce610b3d30*/

publicintbinarySearch(int[]array,intvalue){

//TODO:

implement

intlow=0;

inthigh=array.length-1;

while(low

intmiddle=(low+high)/2;

if(array[middle]==value){

returnmiddle+1;

}

elseif(array[middle]

low=middle+1;

}

elseif(array[middle]>value){

high=middle-1;

}

}

if(low==high){

if(array[low]==value)

returnlow+1;

}

return-1;

}

//publicstaticvoidmain(String[]args){

//int[]array={1,2,3,4,5,6,7,8,9,10};

//BinarySearchbina=newBinarySearch();

//intx=bina.binarySearch(array,10);

//System.out.print(x);

//

//}

}

/***********************************************************************

*Module:

Client.java

*Author:

Administrator

*Purpose:

DefinestheClassClient

***********************************************************************/

importjava.util.*;

/**@pdOid909613c0-f653-4d08-8fba-090e54c06bc1*/

publicclassClient{

publicstaticvoidmain(String[]args){

intarray[]={100,9,7,28,47,98,288,40,58,2,16,49,66,9};

intvalue=100;

DataOperationdataOP=(DataOperation)XMLUtil.getBean();

dataOP.sort(array);

for(inti=0;i

System.out.print(array[i]+"");

}

System.out.println("\n"+dataOP.search(array,value));

}

}

/***********************************************************************

*Module:

DataOperation.java

*Author:

Administrator

*Purpose:

DefinestheInterfaceDataOperation

***********************************************************************/

importjava.util.*;

/**@pdOid8ae548c4-33ee-41f3-a3ca-c2708f730599*/

publicinterfaceDataOperation{

/**@paramarray

*@pdOida443b05c-7086-470c-bf20-60a406a10975*/

voidsort(int[]array);

/**@paramarray

*@paramvalue

*@return

*@pdOid60008c08-0cf8-4889-8de7-4a73ed4e14c0*/

intsearch(int[]array,intvalue);

}

/***********************************************************************

*Module:

DataOperationAdapter.java

*Author:

Administrator

*Purpose:

DefinestheClassDataOperationAdapter

***********************************************************************/

importjava.util.*;

/**@pdOidc9ed4bcc-817f-4ee9-862b-7f1ebaabc048*/

publicclassDataOperationAdapterimplementsDataOperation{

/**@paramarray

*@pdOida2c2f23c-a99d-4a08-91f6-d51277656bc7*/

publicvoidsort(int[]array){

QuickSortquickSort=newQuickSort();

quickSort.quickSort(array);

//TODO:

implement

}

/**@paramarray

*@paramvalue

*@pdOid17dd16dc-4d19-44c0-b66a-02e11fc9d3bd*/

publicintsearch(int[]array,intvalue){

//TODO:

implement

BinarySearchbinarySearch=newBinarySearch();

returnbinarySearch.binarySearch(array,value);

}

}

/***********************************************************************

*Module:

QuickSort.java

*Author:

Administrator

*Purpose:

DefinestheClassQuickSort

***********************************************************************/

importjava.util.*;

/**@pdOidef5ed092-24eb-464a-b1e3-5005f9a3c3f2*/

publicclassQuickSort{

/**@paramarray

*@pdOid69c0b870-15d8-4315-a932-fc8e731428ff*/

publicvoidquickSort(int[]array){

//TODO:

implement

intn=array.length;

diguiSort(array,0,n-1);

}

voiddiguiSort(int[]array,inty,intx){

intvalue=array[y];

inti=y;

intj=x;

while(i

while(array[i]<=value&&i

i++;

}

while(array[j]>=value&&i

j--;

}

if(i

swap(array,i,j);

i++;

j--;

}

}

if(value>array[i]){

swap(array,y,i);

}

else{

i--;

swap(array,y,i);

}

if(i>y+1){

diguiSort(array,y,i);

}

if(i

diguiSort(array,i+1,x);

}

}

voidswap(intarray[],inti,intj){

intvalue=array[i];

array[i]=array[j];

array[j]=value;

}

//publicstaticvoidmain(Stringargs[]){

//int[]array={5,9,8,7,6,10,4,3,2,1,90,79};

//QuickSortquick=newQuickSort();

//quick.quickSort(array);

//for(inti=0;i<12;i++){

//System.out.print(array[i]+"");

//}

//}

}

Config.xml

xmlversion="1.0"?

>

RealAdapter

2.类图:

实现代码:

/***********************************************************************

*Module:

Client.java

*Author:

Administrator

*Purpose:

DefinestheClassClient

***********************************************************************/

importjava.util.*;

/**@pdOid588f59be-7d2f-4416-abde-f6aac80023ad*/

publicclassClient{

publicstaticvoidmain(String[]args){

PlayerAPIplayer=(PlayerAPI)XMLUtil.getBean();

player.run();

}

}

/***********************************************************************

*Module:

PlayerAPI.java

*Author:

Administrator

*Purpose:

DefinestheInterfacePlayerAPI

***********************************************************************/

importjava.util.*;

/**@pdOidaec32bb3-3fea-4675-92b7-1375a72e9159*/

publicinterfacePlayerAPI{

/**@pdOid3047f451-9d27-4334-bfaa-fbe3451a9dfe*/

voidrun();

}

 

/***********************************************************************

*Module:

RealAdapter.java

*Author:

Administrator

*Purpose:

DefinestheClassRealAdapter

***********************************************************************/

importjava.util.*;

/**@pdOid5bfa426e-7366-48df-9863-271c0e302248*/

publicclassRealAdapterextendsRealAPIimplementsPlayerAPI{

/**@pdOid22e942aa-73f0-46db-83b3-342f8e3378dc*/

publicvoidrun(){

//TODO:

implement

realRun();

}

}

/***********************************************************************

*Module:

RealAPI.java

*Author:

Administrator

*Purpose:

DefinestheClassRealAPI

***********************************************************************/

importjava.util.*;

/**@pdOid760d8fcb-b33f-43cd-9b42-e351c13ee37b*/

publicclassRealAPI{

/**@pdOid4cebed7e-f200-4cb9-8908-3c65526a61bb*/

publicvoidrealRun(){

//TODO:

implement

System.out.println("RealPlayer正在播放");

}

}

/***********************************************************************

*Module:

WMPAdapter.java

*Author:

Administrator

*Purpose:

DefinestheClassWMPAdapter

***********************************************************************/

importjava.util.*;

/**@pdOid0db13cde-c69d-4a50-b890-f7f116b47681*/

publicclassWMPAdapterextendsWmpapiimplementsPlayerAPI{

/**@pdOid81925d86-9b28-4d0e-b47c-cf127ad19469*/

publicvoidrun(){

//TODO:

implement

wmpRun();

}

}

/***********************************************************************

*Module:

Wmpapi.java

*Author:

Administrator

*Purpose:

DefinestheClassWmpapi

***********************************************************************/

importjava.util.*;

/**@pdOid825bb43f-be50-4fd6-ad9f-9427efbd4f15*/

publicclassWmpapi{

/**@pdOidd953f0dc-2fb1-46b5-b23e-6343ac7c11de*/

publicvoidwmpRun(){

//TODO:

implement

System.out.println("WindowsMediaPlayer正在播放");

}

}

importjavax.xml.parsers.*;

importorg.w3c.dom.*;

importorg.xml.sax.SAXException;

importjava.io.*;

publicclassXMLUtil

{

//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象

publicstaticObjectgetBean()

{

try

{

//创建DOM文档对象

DocumentBuilderFactorydFactory=DocumentBuilderFactory.newInstance();

DocumentBuilderbuilder=dFactory.newDocumentBuilder();

Documentdoc;

doc=builder.parse(newFile("src/config.xml"));

//获取包含类名的文本节点

NodeListnl=doc.getElementsByTagName("className");

NodeclassNode=nl.item(0).getFirstChild();

StringcName=classNode.getNodeValue();

//通过类名生成实例对象并将其返回

Classc=Class.forName(cName);

Objectobj=c.newInstance();

returnobj;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2