设计模式上机试验二试验报告.docx
- 文档编号:10924995
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:15
- 大小:301.43KB
设计模式上机试验二试验报告.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[])
Hextiorychecking!
CPUrunning!
HardDiskreading]OSloading!
Memoryoff-
CPUoff«HaEdDiskoff!
OS口工:
E!
Software
+run():
void
令V
ShoppingRequest
-
shoppingReasor
:
String
-
billMorey
:
double
+
<
getBillMoney()
:
double
+
<
setBillMoney(doublenewBillMoney)
:
void
+
<
getShoppingReason()
:
String
+
<
setShoppingReason(StringnewShoppingReason)
:
void
I
Frollemi"Iivfldoc
尺・Ded.urat:
on
OCcnsdi>X%
pi
"•子““曲*』》StftiriraRCli
*»+[JwkApjlifl's]0'Fk■敢対樋Filts^GiwiLI**4ir*nnrin\tjj«3jt
壬讯T*岀卜理撷帝采毗1:
他丢町印纟氐批准丢购诒金为:
100D.DRMB
部门疑理刘待华舸辭储玉和:
办次幸配音字渦卄沸采曲省金丸玄刘R.1WTO副蛊理张曼玉巾任卑樹资采购:
®新电脑.扌比准采It谙金为:
aOOOO^RHR
总经理成龙也黠惟冠h车间絢曲批推亲购瓷金为:
150000.ORHB
草事合熔开令处理物资采购:
収购RL公扌晰隹采购诗金4000Q00.0RIB
Menu
-menultemList:
ArrayList
+addMenultem(Menultemitem)
:
void
+getMenultemByName(StringitemName)
:
Menultem
0..*
Menultem
-
command:
Command
-
itemName:
String
+
clik(
:
void
+
vvConstructor>>
Menultem(Stringname,Commandcmd)
+
<
getCommand()
:
Command
+
<
setCommand(CommandnewCommand)
:
void
+
<
getltemName()
:
String
+
<
setltemName(StringnewltemName)
:
void
1..1
1..1
Command
+execute():
void
lick();
);
("create").click();
("edit").click();
}
}
运行结果:
(6)迭代器模式某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器(MyIterator)实现对该商品名称数组的双向(前向和后向)遍历。
绘制类图并编程实现(设计方案必须符合DIP)。
A
J
MyIterator
+
first():
void
+
last():
void
+
hasNext():
boolean
+
hasPrevious():
boolean
+
next():
void
+
previous():
void
+
isFirst():
boolean
+
isLast():
boolean
+
getCurrentItem():
Object
A
NewCollection
-obj:
Object]]
+<
Mylterator
—NewIterator
NewIterator
-
currentIndex:
int
+
<
first()
:
void
+
<
last()
:
void
+
<
hasNext()
:
boolean
+
<
hasPrevious()
:
boolean
+
<
next()
:
void
+
<
previous()
:
void
+
<
isFirst()
:
boolean
+
<
isLast()
:
boolean
+
<
getCurrentItem()
:
Object
packageIteratorPattern;
interfaceMyCollection
{
MyIteratorcreatelterator();
v:
Vector
MySubject
JMyObserver
+addObserver(MyObserverobserver):
void
+response():
void
+deleteObserver(MyObserverobserver):
void
+fireNotice():
void
A
IBMStock
1..1
-price:
double
+<
getPrice()
:
double
1..1
+<
setPrice(doublenewPrice)
:
void
IBMStocker
-name:
String
-subject:
IBMStock
+vvlmplement>>response():
void
+vvConstructor>>IBMStocker(Stringname,IBMStocksubject)
esponse();
}
}
}
BookCart
-list:
ArrayList
+addBookOrder(BookOrderorder)
:
void
+deletBookOrder(BookOrderorder)
:
void
+payBill()
:
double
0..1
0..*
L
BookOrder
-bookID:
int
-price:
double
-type:
String
-amount:
int
-strategy:
DiscountStrategy
+
<
getBookID()
:
int
+
<
setBookID(intnewBookID)
:
void
+
<
getPrice()
:
double
+
<
setPrice(doublenewPrice)
:
void
+
<
getAmount()
:
int
+
<
setAmount(intnewAmount)
:
void
+
<
getType0
:
String
+
<
setType(StringnewType)
:
void
+
getOrderMoney()
:
double
+
setDiscountStrategy()
:
void
—DiscountStrategy
+compute(intamount,doubleprice):
double
p△0
NovelDiscountStrategy
ComputerDiscountStrategy
+vvlmplement>>compute(intamount,doubleprice)
+vvlmplement>>compute(intamount,doubleprice):
double
LanguageDiscountStrategy
+vvlmplement>>compute(intamount,doubleprice):
double
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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 上机 试验 试验报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)