设计模式刘伟 实验参考答案Word下载.docx
- 文档编号:22192266
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:32
- 大小:266.69KB
设计模式刘伟 实验参考答案Word下载.docx
《设计模式刘伟 实验参考答案Word下载.docx》由会员分享,可在线阅读,更多相关《设计模式刘伟 实验参考答案Word下载.docx(32页珍藏版)》请在冰豆网上搜索。
createShape(Stringtype):
Shape
draw()
erase()
Shape
UnsupportedShapeException
(
UnsupportedShapeException
Stringmessage)
3.现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG图片读取器(JpgReader)用于读取JPG格式的图片。
图片读取器对象通过图片读取器工厂ImageReaderFactory来创建,ImageReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其子类GifReaderFactory和JpgReaderFactory用于创建具体的图片读取器对象。
试使用工厂方法模式设计该程序,绘制类图并编程模拟实现。
需充分考虑系统的灵活性和可扩展性。
4.某软件公司欲开发一套界面皮肤库,可以对桌面软件进行界面美化。
不同的皮肤将提供视觉效果不同的按钮、文本框、组合框等界面元素,其结构如下图所示:
该皮肤库需要具备良好的灵活性和可扩展性,用户可以自由选择不同的皮肤,开发人员可以在不修改既有代码的基础上增加新的皮肤。
试使用抽象工厂模式设计该皮肤库,绘制类图并编程模拟实现。
5.使用单例模式的思想实现多例模式,确保系统中某个类的对象只能存在有限个,例如两个或三个,设计并编写代码实现一个多例类。
Multiton
-array:
Multiton[]
-Multiton()
+getInstance():
Multiton
+random():
int
多例模式(MultitonPattern)是单例模式的一种扩展形式,多例类可以有多个实例,而且必须自行创建和管理实例,并向外界提供自己的实例,可以通过静态集合对象来存储这些实
例。
多例类Multiton的代码如下所示:
import.*;
publicclassMultiton
{
使用单例模式设计一个多文档窗口(注:
在JavaAWT/Swing开发中可使用
JDesktopPane和JInternalFrame来实现),要求在主窗体中某个内部子窗体只能实例化一次,即只能弹出一个相同的子窗体,如下图所示,编程实现该功能。
(注:
用C#或C++实现类似功能也可以)参考答案:
SubFrame
-
frame:
SubFrame
SubFrame()
getFrame()
MyIFListener
MainClass
button
desktopPane
iFrame
JButton
JDesktopPane
()
MainClass
BtListener
SubFrame类充当单例类,在其中定义了静态工厂方法getFrame()。
代码如下所示:
importimport.*;
import
OperationAdapter
sortObj
searchObj
QuickSort
BinarySearch
OperationAdapter(QuickSortsortObj,
BinarySearchsearchObj)
sort(intarray[])
search(intarray[],intkey)
[]
DataOperation
QuickSort
quickSort(intarray[])
sort(intarray[],intp,intr)
partition(inta[],intp,intr)
swap(inta[],inti,intj)
BinarySearch
binarySearch(intarray[],intkey):
MediaPlayerWindow
MainWindow
MediaPlayerFactory
createMainWindow()
createPlayerList()
MainWindow
PlayerList
PlayerFactory
ClientClass
RealPlayerFactory
RealPlayerWindow
MediaPlayerList
PlayerList
RealPlayerList
MediaPlayerAPI
RealPlayerAPI
北京总部
教务办公室
湖南
分校
行政办公室
长沙教学点
湘潭教学点
list
Unit
{
abstract}
handleArchives():
Office
name:
String
Office(Stringname)
handleArchives()
Institution
name
ArrayList
Institution(Stringname)
add(Unitunit)
andleArchives();
}
}
在客户类中创建树形结构,代码如下所示:
classClient
{publicstaticvoidmain(Stringargs[])
{
InstitutionbjHeadquarters,hnSubSchool,csTeachingPost,xtTeachingPost;
UnittOffice1,tOffice2,tOffice3,tOffice4,aOffice1,aOffice2,aOffice3,aOffice4;
bjHeadquarters=newInstitution("
北京总部"
);
hnSubSchool=newInstitution("
湖南分校"
csTeachingPost=newInstitution("
长沙教学点"
xtTeachingPost=newInstitution("
湘潭教学点"
tOffice1=newOffice("
北京教务办公室"
tOffice2=newOffice("
湖南教务办公室"
tOffice3=newOffice("
长沙教务办公室"
tOffice4=newOffice("
湘潭教务办公室"
aOffice1=newOffice("
北京行政办公室"
aOffice2=newOffice("
湖南行政办公室"
aOffice3=newOffice("
长沙行政办公室"
aOffice4=newOffice("
湘潭行政办公室"
(tOffice3);
(aOffice3);
(tOffice4);
(aOffice4);
(csTeachingPost);
(xtTeachingPost);
(tOffice2);
(aOffice2);
(hnSubSchool);
(tOffice1);
(aOffice1);
();
注:
本题也可以将员工(Employee)作为叶子构件,将Unit作为容器构件。
3.某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功能
可以将原本存储在手机中的通信录、短信、照片、歌曲等资料一次性全部拷贝到移动存储介质(例如MMC卡或SD卡)中。
在实现过程中需要与多个已有的类进行交互,例如通讯录管理类、短信管理类等,为了降低系统的耦合度,试使用外观模式来设计并编程模拟实现该一键备份功能。
参考答案:
参考类图如下所示:
OneKeyBackup
cm
mm
fm
ContactManager
MessageManager
FileManager
click():
ContactManager
backup():
MessageManager
FileManager
其中,OneKeyBackup充当外观角色,ContactManager、MessageManager和FileManager充当子系统角色。
4.某信息系统需要提供一个数据处理和报表显示模块,该模块可以读取不同类型的文件中的数据并将数据转换成XML格式,然后对数据进行统计分析,最后以报表方式来显示数据。
由于该过程需要涉及到多个类,试使用外观模式设计该数据处理和报表显示模块。
考虑到有些文件本身已经是XML格式,无须进行格式转换,为了让系统具有更好的扩展性,在系统设计中可以引入抽象外观类。
AbstractFacade
execute
XMLFacade
ExtendedFacade
FileOperation
read
XMLDataConvertor
convert
ReportDisplay
display
DataAnalysis
handle
实验3
1.在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法method()调用之前输出“方法method()被调用,调用时间为2014-11-510:
10:
10”,调用之后如果没有抛异常则输出“方法method()调用成功”,否则输出“方法method()调用失败”。
在代理类中调用真实业务类的业务方法,使用代理模式设计该日志记录模块的结构,绘制类图并编程模拟实现。
BusinessClass
method():
AbstractLog
LoggerProxy
business:
BusinessClass
LoggerProxy()
method()
2.某软件公司承接了某信息咨询公司的收费商务信息查询系统的开发任务,该系统的基本需求如下:
(1)在进行商务信息查询之前用户需要通过身份验证,只有合法用户才能够使用该查询系统;
(2)在进行商务信息查询时系统需要记录查询日志,以便根据查询次数收取查询费用。
该软件公司开发人员已完成了商务信息查询模块的开发任务,现希望能够以一种松耦合的方式向原有系统增加身份验证和日志记录功能,客户端代码可以无区别地对待原始的商务信息查询模块和增加新功能之后的商务信息查询模块,而且可能在将来还要在该信息查询模块中增加一些新的功能。
试使用代理模式设计并编程模拟实现该收费商务信息查询系统。
【提示:
使用保护代理和智能引用代理】参考答案:
ProxySearcher
searcher
validator
logger
RealSearcher
AccessValidator
Logger
doSearch()
validate()
log()
boolean
Searcher
doSearch():
RealSearcher
AccessValidator
validate():
Logger
log():
3.某企业的SCM(SupplyChainManagement,供应链管理)系统中包含一个采购审批子系统。
该企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开董事会讨论决定。
如下图所示:
4.某公司欲开发一个软件系统的在线文档帮助系统,用户可以在任何一个查询上下文
中输入查询关键字,如果当前查询环境下没有相关内容,则系统会将查询按照一定的顺序转发给其他查询环境。
基于上述需求,试采用职责链模式对该系统进行设计。
successor
SearchContext
#successor:
SearchContext
setSuccessor(SearchContextsuccessor)
search(Stringkeyword)
JavaSearchContext
search(Stringkeyword):
UMLSearchContext
SQLSearchContext
5.房间中的开关就是命令模式的一个实例,现用命令模式来模拟开关的功能,可控制对象包括电灯和电风扇,绘制相应的类图并编程模拟实现。
Switch
on()
off()
Command
executeOn()
executeOff()
LampCommand
lamp:
Lamp
Lamp
lighten()
quench()
FanCommand
fan:
Fan
Fan
run()
stop()
其中,Switch充当调用者(发送者)角色,Command是抽象命令类,LampCommand和FanCommand充当具体命令角色,Lamp和Fan充当接收者角色。
6.某软件公司欲开发一个基于Windows平台的公告板系统。
系统提供一个主菜单
(Menu),在主菜单中包含了一些菜单项(MenuItem),可以通过Menu类的addMenuItem()方法增加菜单项。
菜单项的主要方法是click(),每一个菜单项包含一个抽象命令类,具体命令类包括OpenCommand(打开命令),CreateCommand(新建命令),EditCommand(编辑命令)等,命令类具有一个execute()方法,用于调用公告板系统界面类(BoardScreen)的open()、create()、edit()等方法。
现使用命令模式设计该系统,使得MenuItem类与BoardScreen类的耦合度降低,绘制类图并编程实现。
BoardScreen
menu:
Menu
BoardScreen()
open()
create()
edit()
Menu
itemList:
addMenuItem(MenuItemitem):
MenuItem
command
Command
MenuItem(Stringname)
getName()
setName(Stringname)
getCommand()
setCommand(Commandcommand)
click()
execute():
OpenCommand
screen:
BoardScreen
OpenCommand(BoardScreenscreen)
execute()
CreateCommand
CreateCommand(BoardScreenscreen)
EditCommand
EditCommand(BoardScreenscreen)
其中,BoardScreen充当接收者角色,MenuItem充当调用者角色,Command充当抽象命令角色,OpenCommand、CreateCommand和EditCommand充当具体命令角色。
实验4
1.某实时在线股票软件需要提供如下功能:
当股票购买者所购买的某支股票价格变化幅度达到5%时,系统将自动发送通知(包括新价格)给购买该股票的所有股民。
试使用观察者模式设计并实现该系统,要求绘制相应的类图并编程模拟实现。
investors
ConcreteInvestor
ConcreteInvestor(S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计模式刘伟 实验参考答案 设计 模式 实验 参考答案
![提示](https://static.bdocx.com/images/bang_tan.gif)