软件设计实验三 结构型设计模式实验

一、实验目的

1.结合实例,熟练绘制常见的结构型设计模式结构图。
2.结合实例,熟练使用任意一种面向对象编程语言实现常见的结构型设计模式。
3.通过本实验,理解每一种结构型设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些设计模式。

二、实验内容

1.现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[]),int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch的binarySearch(int[],int)方法实现了二分查找算法。现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法,适配到DataOperation接口中。绘制类图并编程实现(要求实现快速排序和二分查找)。
2. 海尔(Haier)、TCL、海信(Hisense)都是家电制造商,它们都生产电视机(Television)、空调(Air Conditioner)、冰箱(Refrigeratory)。现需要设计一个系统,描述这些家电制造商以及它们所制造的电器,要求绘制类图并用代码模拟实现。
3. 某教育机构组织结构如下图所示:
在这里插入图片描述

在该教育机构的OA系统中可以给各级办公室下发公文,现采用组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。
4. 在电脑主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法,如内存(Memory)的自检(check()),CPU的运行(run()),硬盘(HardDisk)的读取(read()),操作系统(OS)的载入(load())等,如果某一过程发生错误则电脑启动失败。使用外观模式模拟该过程,绘制类图并编程模拟实现。
5. 应用软件所提供的桌面快捷方式是快速启动应用程序的代理,桌面快捷方式一般使用一张小图片来表示(Picture),通过调用快捷方式的run()方法将调用应用软件(Application)的run()方法。使用代理模式模拟该过程,绘制类图并编程模拟实现。
6. 某移动社交软件欲增加一个群组(Group)功能。通过设置,用户可以将自己的动态信息,包括最新动态、新上传的视频以及分享的链接等,分享给某个特定的成员(Member),也可以分享给某个群组中的所有成员;用户可以将成员添加至某个指定的群组;此外,还允许用户在一个群组中添加子群组,以便更加灵活地实现面向特定人群的信息共享。现采用组合模式来设计该群组功能,结合场景绘制相应的结构图并编程模拟实现(类名、方法名和属性名可自行定义)。
7. 某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功能可以将原本存储在手机中的通信录、短信、照片、歌曲等资料一次性全部拷贝到移动存储介质(例如MMC卡或SD卡)中。在实现过程中需要与多个已有的类进行交互,例如通讯录管理类、短信管理类等,为了降低系统的耦合度,试使用外观模式来设计并编程模拟实现该一键备份功能。

三、实验要求

  1. 结合实例,绘制常见结构型设计模式的结构图;
  2. 使用任意一种面向对象编程语言实现常见结构型设计模式实例,代码运行正确。

四、实验步骤

  1. 结合实例,绘制适配器模式实例结构图并用面向对象编程语言实现该模式实例;
  2. 结合实例,绘制桥接模式实例结构图并用面向对象编程语言实现该模式实例;
  3. 结合实例,绘制组合模式实例结构图并用面向对象编程语言实现该模式实例;
  4. 结合实例,绘制外观模式实例结构图并用面向对象编程语言实现该模式实例;
  5. 结合实例,绘制代理模式实例结构图并用面向对象编程语言实现该模式实例;
  6. 结合实例,绘制组合模式实例结构图并用面向对象编程语言实现该模式实例;
  7. 结合实例,绘制外观模式实例结构图并用面向对象编程语言实现该模式实例。

五、实验结果

  1. 需要提供适配器模式实例的结构图(类图)和实现代码。
    (1)类图实现:
    在这里插入图片描述

(2)实现代码:
//抽象数据操作类:目标接口
interface DataOperation{
public int[] sort(int array[]);
public int search(int array[],int key); }
//快速排序类:适配者
class QuickSort{
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; } }
//二分查找类:适配者
class BinarySearch{
public int binarySearch(int array[],int key){
int low = 0; int high = array.length -1;
while(low <= high){<

  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值