设计模式实验五

上传人:cn****1 文档编号:470545131 上传时间:2022-08-29 格式:DOC 页数:21 大小:984.04KB
返回 下载 相关 举报
设计模式实验五_第1页
第1页 / 共21页
设计模式实验五_第2页
第2页 / 共21页
设计模式实验五_第3页
第3页 / 共21页
设计模式实验五_第4页
第4页 / 共21页
设计模式实验五_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《设计模式实验五》由会员分享,可在线阅读,更多相关《设计模式实验五(21页珍藏版)》请在金锄头文库上搜索。

1、实验5 结构型和行为型设计模式实验实验学时: 2 每组人数: 1 实验类型: 3 (1:基础性 2:综合性 3:设计性 4:研究性)实验规定: 1 (1:必修 2:选修 3:其它)实验类别: 3 (1:基础 2:专业基础 3:专业 4:其它)一、实验目的纯熟使用PowerDesigner和任意一种面向对象编程语言实现几种常见的结构型和行为型设计模式,涉及代理模式、职责链模式和命令模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。二、实验内容1. 在某应用软件中需要记录业务方法的调用日记,在不修改现有业务类的基础上为每一个类提供一个日记记录代理类,在代理类中输出日记

2、,例如在业务方法method()调用之前输出“方法method()被调用,调用时间为2023-11-5 10:10:10”,调用之后假如没有抛异常则输出“方法method()调用成功”,否则输出“方法method()调用失败”。在代理类中调用真实业务类的业务方法,使用代理模式设计该日记记录模块的结构,绘制类图并编程模拟实现。2. 某软件公司承接了某信息征询公司的收费商务信息查询系统的开发任务,该系统的基本需求如下:(1) 在进行商务信息查询之前用户需要通过身份验证,只有合法用户才可以使用该查询系统;(2) 在进行商务信息查询时系统需要记录查询日记,以便根据查询次数收取查询费用。该软件公司开发人

3、员已完毕了商务信息查询模块的开发任务,现希望可以以一种松耦合的方式向原有系统增长身份验证和日记记录功能,客户端代码可以无区别地对待原始的商务信息查询模块和增长新功能之后的商务信息查询模块,并且也许在将来还要在该信息查询模块中增长一些新的功能。试使用代理模式设计并编程模拟实现该收费商务信息查询系统。【提醒:使用保护代理和智能引用代理】3. 某公司的SCM(Supply Chain Management,供应链管理)系统中包含一个采购审批子系统。该公司的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不涉及5万元)的采购单,副董事长可以审批5万元至10

4、万元(不涉及10万元)的采购单,董事长可以审批10万元至50万元(不涉及50万元)的采购单,50万元及以上的采购单就需要开董事会讨论决定。如下图所示:试使用职责链模式设计并实现该系统。4. 某公司欲开发一个软件系统的在线文档帮助系统,用户可以在任何一个查询上下文中输入查询关键字,假如当前查询环境下没有相关内容,则系统会将查询按照一定的顺序转发给其他查询环境。基于上述需求,试采用职责链模式对该系统进行设计。5. 房间中的开关就是命令模式的一个实例,现用命令模式来模拟开关的功能,可控制对象涉及电灯和电风扇,绘制相应的类图并编程模拟实现。6. 某软件公司欲开发一个基于Windows平台的公告板系统。

5、系统提供一个主菜单(Menu),在主菜单中包含了一些菜单项(MenuItem),可以通过Menu类的addMenuItem()方法增长菜单项。菜单项的重要方法是click(),每一个菜单项包含一个抽象命令类,具体命令类涉及OpenCommand(打开命令),CreateCommand(新建命令),EditCommand(编辑命令)等,命令类具有一个execute()方法,用于调用公告板系统界面类(BoardScreen)的open()、create()、edit()等方法。现使用命令模式设计该系统,使得MenuItem类与BoardScreen类的耦合度减少,绘制类图并编程实现。三、实验规定1

6、. 结合实例,对的无误地绘制代理模式、职责链模式和命令模式的模式结构图;2. 使用任意一种面向对象编程语言实现代理模式、职责链模式和命令模式实例,代码运营对的无误。四、实验环节1. 结合实例,使用PowerDesigner绘制代理模式实例结构图并用面向对象编程语言实现该模式实例;2. 结合实例,使用PowerDesigner绘制代理模式实例结构图并用面向对象编程语言实现该模式实例;3. 结合实例,使用PowerDesigner绘制职责链模式实例结构图并用面向对象编程语言实现该模式实例;4. 结合实例,使用PowerDesigner绘制职责链模式实例结构图并用面向对象编程语言实现该模式实例;5.

7、 结合实例,使用PowerDesigner绘制命令模式实例结构图并用面向对象编程语言实现该模式实例;6. 结合实例,使用PowerDesigner绘制命令模式实例结构图并用面向对象编程语言实现该模式实例。五、实验结果1. 类图:实现代码:AbstractLog.javapublic interface AbstractLog public void method();LogProxy.javaimport java.text.SimpleDateFormat;import java.util.Date;public class LogProxy implements AbstractLog p

8、rivate LogRecord logRecord = new LogRecord(); private SimpleDateFormat SDF = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); private String time = SDF.format(new Date(); public void method() System.out.println(方法Method被调用,调用时间为: + time); try logRecord.method(); System.out.println(方法method()调用成功); catch(E

9、xception e) System.out.println(方法method()调用失败); LogRecord.javapublic class LogRecord implements AbstractLog public void method() System.out.println(真实业务方法); XMLUtil.javaimport javax.xml.parsers.*;import org.w3c.dom.*;import java.io.*;public class XMLUtil/该方法用于从XML配置文献中提取具体类类名,并返回一个实例对象 public static

10、 Object getBean() try /创建DOM文档对象 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; doc = builder.parse(new File(src/config.xml); /获取包含类名的文本节点 NodeList nl = doc.getElementsByTagName(className); Node classNode

11、=nl.item(0).getFirstChild(); String cName=classNode.getNodeValue(); /通过类名生成实例对象并将其返回 Class c=Class.forName(cName); Object obj=c.newInstance(); return obj; catch(Exception e) e.printStackTrace(); return null; Client.javapublic class Client public static void main(String args)AbstractLog al;al = (Abst

12、ractLog)XMLUtil.getBean();al.method();2. 类图:实现代码:AbstractSearch .javapublic interface AbstractSearch String search(String uid);SearchProxy.javapublic class SearchProxy implements AbstractSearch private RealSearch realSearch = new RealSearch(); private Validator validator; public String search(String uid) if (Validate(uid) String result = realSearch.search(uid); Log(uid); return result; else return null; private void Log(String uid) System.out.println(记录日记); private boolean Validate(String uid) validator = new Validator(); return validator.validate(uid); RealSearch.javapublic class RealSe

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号