设计模式实验五_第1页
设计模式实验五_第2页
设计模式实验五_第3页
设计模式实验五_第4页
设计模式实验五_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

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

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

5、风扇,绘制相应的类图并编程模拟实现。6 .某软件公司欲开发一个基于Windows平台的公告板系统。系统提供一个主菜单(Menu),在主菜单中包含了一些菜单项(MenuItem),可以通过 Menu类的addMenuItem()方法增加菜单项。菜单项的主要方法是click(),每一个菜单项包含一个抽象命令类,具体命令类包括 OpenCommandf(T开命令),CreateCommand(新建命令),EditCommand(编辑命令)等, 命令类具有一个execute。方法,用于调用公告板系统界面类(BoardScreen)的open()、create() 、edit()等方法。现使用命令模式设

6、计该系统,使得 MenuItem类与BoardScreen 类的耦合度降低,绘制类图并编程实现。三、实验要求1 .结合实例,正确无误地绘制代理模式、职责链模式和命令模式的模式结构图;2 .使用任意一种面向对象编程语言实现代理模式、职责链模式和命令模式实例,代码 运行正确无误。四、实验步骤1.结合实例,使用PowerDesigner绘制代理模式实例结构图并用面向对象编程语言实现该模式实例;2.结合实例,使用PowerDesigner绘制代理模式实例结构图并用面向对象编程语言实现该模式实例;3.结合实例,使用PowerDesigner绘制职责链模式实例结构图并用面向对象编程语言实现该模式实例;4.

7、结合实例,使用PowerDesigner绘制职责链模式实例结构图并用面向对象编程语言实现该模式实例;5.结合实例,使用PowerDesigner绘制命令模式实例结构图并用面向对象编程语言实现该模式实例;6.结合实例,使用PowerDesigner绘制命令模式实例结构图并用面向对象编程语言实现该模式实例。五、实验结果LogProtyLogRecord+ method () :void+ method () : void实现代码:public interface AbstractLog public void method();import class LogProxy implements Ab

8、stractLog private LogRecord logRecord = new LogRecord();private SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");private String time = (new Date();public void method() " 方法Method被调用,调用时间为:"+ time);try();"方法method()调用成功");catch(Exception e)"方法metho

9、d()调用失败");public class LogRecord implements AbstractLog public void method() " 真实业务方法");import .*;public class XMLUtiletFirstChild();String cName=();public class SearchProxy implements Abstractsearch private RealSearch realSearch = new RealSearch();private Validator validator;public S

10、tring search(String uid) if (Validate(uid) String result = (uid);Log(uid);return result;elsereturn null;private void Log(String uid) "记录日志");private boolean Validate(String uid) validator = new Validator();return (uid);public class RealSearch implements AbstractSearch public String search(

11、String uid) + "在进行具体查询");return " 具体查询内容"public class Validator public boolean validate(String uid) if (uid = "uid")"验证通过");return true;"验证失败");return false;public class Client public static void main(String口 args)AbstractSearch as;as = (AbstractSear

12、ch)();("uid");2.类图:fimey double附,50方由HpeaC才曲出* *CifllBi *Ogr43iM* ccfiaiBr1 aEMoneyj Wtre>j. widh*.理I" -it 1 pl - - i 厂+ MunajE-: S fE run-)QBMKlBF*,*11*件il<R7-JLfi'J 鼎tji+MI eJ* IbiFLf 必HB iannelt -rlgMRTnWlFglWK3pPlllPfl| 。中 1实现代码:public abstract class Leader protected Lea

13、der successor;protected String name;public Leader()public abstract void handleRequest(PurchaseRequest pRequest);public Leader(String name) =name;public void setSuccessor(Leader successor) =successor;public class Director extends Leader public Director(String name) super(name);public void handleReque

14、st(PurchaseRequest pRequest) if () < 50000)"主任"+ + " 审批采购单,采购金额为" + ();else if != null)public class Manager extends Leader public Manager(String name) super(name);public void handleRequest(PurchaseRequest pRequest) if () < 100000)"副董事长"+ + " 审批采购单,采购金额为"

15、+ ();else if != null) public class GeneralManager extends Leader public GeneralManager(String name) super(name);public void handleRequest(PurchaseRequest pRequest) if () < 500000)"董事长"+ + "审批采购单,采购金额为"+ ();else if != null)public class BoardOfDirectors extends Leader public Boa

16、rdOfDirectors() public void handleRequest(PurchaseRequest pRequest) "董事会讨论决定是否批准采购单,采购金额为"+ ();public class PurchaseRequest private double money;public PurchaseRequest(double money) =money;public double getMoney() return money;public void setMoney(double newMoney) money = newMoney;public c

17、lass Client public static void main(String口 args)Leader l1, l2, l3, l4;PurchaseRequest pr1, pr2, pr3, pr4, pr5;11 = new Director。'张三");12 = new Manager(" 李四");13 = new GeneralManager(" 王五");14 = new BoardOfDirectors();pr1 = new PurchaseRequest(20000);pr2 = new PurchaseRe

18、quest(60000);pr3 = new PurchaseRequest(120000);pr4 = new PurchaseRequest(520000);(l2);(;(l4);(pr1); (pr2);(pr3);(pr4);3.类图:SearchContextabstractH successor SearchContext+ setSuccessor (SearchContext successor) - void+ search (String Iceyvoid7VSearch Co rtextlSearch Co ntext2+ search (String key) :vo

19、id + search (String key) void实现代码:public abstract class SearchContext protected SearchContext successor;public void setSuccessor(SearchContext successor) =successor;public abstract void search(String key);public class SearchContextl extends SearchContext public void search(String key) if (key = &quo

20、t;key1")"在Context1中查到相关内容");else if != null)public class SearchContext2 extends SearchContext public void search(String key) if (key = "key2")"在Context2中查到相关内容");else if != null)else"未查到相关内容”);public class Client public static void main(String口 args)SearchCont

21、ext sc1, sc2;sc1 = new SearchContext1();sc2 = new SearchContext2();(sc2);("key2");4.类图:FinCommand 1-tun ; Fun二 Ufh* apeno vod ciosft 0 vodLiflhr4 apen 0 . void* close 0 . voidLightCornmand-hght . Light, execute() .me实现代码:public class Switch private AbstractCommand abstractCommand;public vo

22、id setComman(AbstractCommand abstractCommand) =abstractCommand;public void open() ();public void close() ();public abstract class Abstractcommand public abstract void open();public abstract void close();public class FunCommand extends Abstractcommand private Fun fun = new Fun();public void open() ()

23、;public void close() ();private Light light = new Light();public void open() ();public void close() ();public class Fun public void open() " 开风扇");public void close() "关风扇");Light .javapublic class Light public void open() "开灯)public void close() 关灯)public class Client publi

24、c static void main(String口 args)Switch s = new Switch();Abstractcommand ac;ac = (AbstractCommand)();(ac);();();5.类图:atHEradCornrTBnd 4 1 rftrlC*minandnare* CIICHO* MMuM例E憧怅口* satCammand (芭 KI祀tCjrrrend ah&adConiiniandf rTKniflemlJSt Airayljst4 idMenuAem (IJfefiLtan menJfeni.ivn出_* nmMliani*mh*fe

25、nulAnimmitemii .void 口oshi与Tkn 0jarcj:STPs=q ejuecute H Qdan ngAJtJffl-adConTWKi abstract!.w»dd* esecUH 0 voidFdirCDmrTurirl口Nl 心 mmendboartJSciwi BtwdS口m* 口询 0 void* crealt il事 edrt 力boardSoeen , BoartiSoeefi * execute l) voidBoardScreen实现代码:import class Menu public ArrayList<MenuItem> m

26、enuItemList = new ArrayList<MenuItem>();public void addMenuItem(MenuItem menuItem) (menuItem);+ "功能加入主菜单");public void removeMenuItem(MenuItem menuItem) (menuItem);+ "功能从主菜单中移除");public class MenuItem private String name;public AbstractCommand abstractCommand;public void click() ();public MenuItem(String name) =name;public void setCommand(AbstractCommand abstractcommand) =abstractcommand;public String getName() return name;AbstractCommand .javapublic abstract cl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论