设计模式上机实验二实验报告.docx
- 文档编号:27820197
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:15
- 大小:291.11KB
设计模式上机实验二实验报告.docx
《设计模式上机实验二实验报告.docx》由会员分享,可在线阅读,更多相关《设计模式上机实验二实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
设计模式上机实验二实验报告
设计模式实验二
实验报 告书
专业班级软件0703
学号24
姓名吉亚云
指导老师刘伟
时间2010年4月24日
中南大学软件学院
实验二设计模式上机实验二
一、实验目的
使用PowerDesigner和任意一种面向对象编程语言实现几种常用的设计模式,加深对这些模式的理解,包括装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式。
二、实验内容
使用PowerDesigner和任意一种面向对象编程语言实现装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式,包括根据实例绘制相应的模式结构图、编写模式实现代码,运行并测试模式实例代码。
三、实验要求
1.正确无误绘制装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式的模式结构图;
2.使用任意一种面向对象编程语言实现装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式,代码运行正确无误。
四、实验步骤
1.使用PowerDesigner绘制装饰模式结构图并用面向对象编程语言实现该模式;
2.使用PowerDesigner绘制外观模式结构图并用面向对象编程语言实现该模式;
3.使用PowerDesigner绘制代理模式结构图并用面向对象编程语言实现该模式;
4.使用PowerDesigner绘制职责链模式结构图并用面向对象编程语言实现该模式;
5.使用PowerDesigner绘制命令模式结构图并用面向对象编程语言实现该模式;
6.使用PowerDesigner绘制迭代器模式结构图并用面向对象编程语言实现该模式;
7.使用PowerDesigner绘制观察者模式结构图并用面向对象编程语言实现该模式;
8.使用PowerDesigner绘制状态模式结构图并用面向对象编程语言实现该模式;
9.使用PowerDesigner绘制策略模式结构图并用面向对象编程语言实现该模式;
10.使用PowerDesigner绘制模板方法模式结构图并用面向对象编程语言实现该模式。
五、实验报告要求
1.提供装饰模式结构图及实现代码;
2.提供外观模式结构图及实现代码;
3.提供代理模式结构图及实现代码;
4.提供职责链模式结构图及实现代码;
5.提供命令模式结构图及实现代码;
6.提供迭代器模式结构图及实现代码;
7.提供观察者模式结构图及实现代码;
8.提供状态模式结构图及实现代码;
9.提供策略模式结构图及实现代码;
10.提供模板方法模式结构图及实现代码。
六、实验结果
(1)装饰模式
某图书管理系统中,书籍类(Book)具有借书方法borrowBook()和还书方法returnBook()。
现需要动态给书籍对象添加冻结方法freeze()和遗失方法lose()。
使用装饰模式设计该系统,绘制类图并编程实现。
packageDirectorPattern;
interfaceBook
{
voidborrowBook();
voidreturnBook();
}
finalclassMyBookimplementsBook
{
publicvoidborrowBook(){
"MyBookborrowing!
");
}
publicvoidreturnBook(){
"MyBookreturning!
");
}
}
abstractclassBookDirectorimplementsBook
{
privateBookbook;
publicBookDirector(Bookbook)
{
"Bookdirectoring!
");
=book;
}
publicvoidborrowBook(){
();
}
publicvoidreturnBook(){
();
}
}
classNewBookextendsBookDirector
{
publicNewBook(Bookbook)
{
super(book);
"BookchangedtoNewBook!
");
}
publicvoidfreeze()
{
"Bookfreezing!
");
}
publicvoidlose()
{
"Booklost!
");
}
}
publicclassBookDirectorClient{
publicstaticvoidmain(Stringa[])
{
etItemName().equals(itemName)){
return(i);
}
}
returnnull;
}
}
lick();
"-------------------------------------");
("create").click();
"-------------------------------------");
("edit").click();
}
}
运行结果:
(6)迭代器模式
某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器(MyIterator)实现对该商品名称数组的双向(前向和后向)遍历。
绘制类图并编程实现(设计方案必须符合DIP)。
packageIteratorPattern;
interfaceMyCollection
{
MyIteratorcreateIterator();
}
;
esponse();
}
}
}
etOrderMoney();
}
"您一共需要付:
"+totalMoney+"RMB。
");
returntotalMoney;
}
}
abstractclassDiscountStrategy
{
publicabstractdoublecompute(intamount,doubleprice);
}
classComputerDiscountStrategyextendsDiscountStrategy
{
publicdoublecompute(intamount,doubleprice){
returnamount*price*;
}
}
classLanguageDiscountStrategyextendsDiscountStrategy
{
publicdoublecompute(intamount,doubleprice){
returnamount*price-amount*2;
}
}
classNovelDiscountStrategyextendsDiscountStrategy
{
publicdoublecompute(intamount,doubleprice){
returnamount*price-(amount*price/100)*10;
}
}
classNullDiscountStrategyextendsDiscountStrategy
{
publicdoublecompute(intamount,doubleprice){
returnamount*price;
}
}
publicclassStrategyClient{
publicstaticvoidmain(Stringargs[])
{
BookCartcart=newBookCart();
BookOrderorder1=newBookOrder(1001,"computer",,10);
BookOrderorder2=newBookOrder(1002,"language",,10);
BookOrderorder3=newBookOrder(1003,"novel",,100);
BookOrderorder4=newBookOrder(1004,"computer",,15);
(order1);
(order2);
(order3);
(order4);
();
}
}
运行结果:
(9)状态模式
某纸牌游戏软件中,人物角色具有入门级(Primary)、熟练级(Secondary)、高手级(Professional)和骨灰级(Final)四种等级,角色的等级与其积分相对应,游戏胜利将增加积分,失败则扣除积分。
入门级具有最基本的游戏功能play(),熟练级增加了游戏胜利积分加倍功能doubleScore(),高手级在熟练级基础上再增加换牌功能changeCards(),骨灰级在高手级基础上再增加偷看他人的牌功能peekCards()。
现使用状态模式来设计该系统,绘制类图并编程实现。
(10)模板方法模式
某银行软件的利息计算流程如下:
系统根据帐号查询用户信息;根据用户信息判断用户类型;不同类型的用户使用不同的利息计算方式计算利息(如活期账户CurrentAccount和定期账户SavingAccount具有不同的利息计算方式);显示利息。
现使用模板方法模式来设计该系统,绘制类图并编程实现。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 上机 实验 报告