设计模式实验三讲解Word文档下载推荐.doc
- 文档编号:3685157
- 上传时间:2023-05-02
- 格式:DOC
- 页数:32
- 大小:283KB
设计模式实验三讲解Word文档下载推荐.doc
《设计模式实验三讲解Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《设计模式实验三讲解Word文档下载推荐.doc(32页珍藏版)》请在冰点文库上搜索。
某软件公司欲开发一个基于Windows平台的公告板系统。
系统提供一个主菜单(Menu),在主菜单中包含了一些菜单项(MenuItem),可以通过Menu类的addMenuItem()方法增加菜单项。
菜单项的主要方法是click(),每一个菜单项包含一个抽象命令类,具体命令类包括OpenCommand(打开命令),CreateCommand(新建命令),EditCommand(编辑命令)等,命令类具有一个execute()方法,用于调用公告板系统界面类(BoardScreen)的open()、create()、edit()等方法。
试使用命令模式设计该系统,使得MenuItem类与BoardScreen类的耦合度降低,绘制类图并编程模拟实现。
(5)迭代器模式
在某在线购物系统的购物车(ShoppingCart)中包含了一个存储商品名称的字符串数组,现需要自定义一个双向迭代器(MyIterator)实现对该商品名称数组的双向(前向和后向)遍历。
绘制类图并编程模拟实现(要求定义抽象层)。
(6)观察者模式
某在线股票软件需要提供如下功能:
当股票购买者所购买的某支股票价格变化幅度达到5%时,系统将自动发送通知(包括新价格)给购买该股票的股民。
现使用观察者模式设计该系统,绘制类图并编程模拟实现(要求定义抽象层)。
(7)策略模式
某软件公司欲开发一款飞机模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征,需要模拟的飞机种类及其特征如表1所示:
表1飞机种类及特征一览表
飞机种类
起飞特征
飞行特征
直升机(Helicopter)
垂直起飞(VerticalTakeOff)
亚音速飞行(SubSonicFly)
客机(AirPlane)
长距离起飞(LongDistanceTakeOff)
歼击机(Fighter)
超音速飞行(SuperSonicFly)
鹞式战斗机(Harrier)
为将来能够模拟更多种类的飞机,试采用策略模式设计并模拟实现该飞机模拟系统。
(8)模板方法模式
某软件公司欲为某银行的业务支撑系统开发一个利息计算模块,利息计算流程如下:
I.系统根据账号和密码验证用户信息,如果用户信息错误,系统显示出错提示;
II.如果用户信息正确,则根据用户类型的不同使用不同的利息计算公式计算利息(如活期账户和定期账户具有不同的利息计算公式);
III.系统显示利息。
试使用模板方法模式设计并模拟实现该利息计算模块。
三、实验要求
1.正确无误绘制外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、策略模式和模板方法模式实例的模式结构图;
2.使用任意一种面向对象编程语言实现外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、策略模式和模板方法模式实例,代码运行正确无误。
四、实验步骤
1.进一步熟悉PowerDesigner15的常用功能;
2.使用PowerDesigner绘制外观模式实例结构图并用面向对象编程语言实现该模式实例;
3.使用PowerDesigner绘制代理模式实例结构图并用面向对象编程语言实现该模式实例;
4.使用PowerDesigner绘制职责链模式实例结构图并用面向对象编程语言实现该模式实例;
5.使用PowerDesigner绘制命令模式实例结构图并用面向对象编程语言实现该模式实例;
6.使用PowerDesigner绘制迭代器模式实例结构图并用面向对象编程语言实现该模式实例;
7.使用PowerDesigner绘制观察者模式实例结构图并用面向对象编程语言实现该模式实例;
8.使用PowerDesigner绘制策略模式实例结构图并用面向对象编程语言实现该模式实例;
9.使用PowerDesigner绘制模板方法模式实例结构图并用面向对象编程语言实现该模式实例。
五、实验报告要求
1.提供外观模式实例结构图及实现代码;
2.提供代理模式实例结构图及实现代码;
3.提供职责链模式实例结构图及实现代码;
4.提供命令模式实例结构图及实现代码;
5.提供迭代器模式实例结构图及实现代码;
6.提供观察者模式实例结构图及实现代码;
7.提供策略模式实例结构图及实现代码;
8.提供模板方法模式实例结构图及实现代码;
9.注意调整类图中文字的字体及字号,注意图的整体布局和图的大小,避免使用交叉线,注意代码字体和颜色,代码字体需一致,颜色需统一;
10.认真写好实验总结;
11.提交电子版实验报告,格式为“学号-姓名-实验3.doc”,如“060102-张三-实验3.doc”,所有材料(包括类图和源代码)均放在一个Word文件中,格式为doc或docx,不需要提交PowerDeigner所保存的oom模型,也无须单独提交源代码。
六、实验结果
1.类图:
实现代码:
Client.java
packagedm.facade;
publicclassClient{
publicstaticvoidmain(String[]args){
BackupFacadebf=newBackupFacade();
bf.oneKeyBackup();
}
}
BackupFacade.java
publicclassBackupFacade{
privateSmsManagersms;
privateSongsManagersong;
privateContactManagercontact;
privatePhotoManagerphoto;
publicBackupFacade(){
sms=newSmsManager();
song=newSongsManager();
contact=newContactManager();
photo=newPhotoManager();
publicvoidoneKeyBackup(){
sms.oneKeyBackup();
song.oneKeyBackup();
contact.oneKeyBackup();
photo.oneKeyBackup();
SmsManager.java
publicclassSmsManager{
System.out.println("
SmsBackupOver"
);
SongsManager.java
publicclassSongsManager{
SongsBackupOver"
PhotoManager.java
publicclassPhotoManager{
publicvoidoneKeyBackup(){
//TODO:
implement
System.out.println("
PhotoBackupOver"
}
ContactManager.java
publicclassContactManager{
ContactBackupOver"
2.类图:
packagedm.proxy;
Serviceservice;
service=newProxy();
service.method();
Proxy.java
publicclassProxyimplementsService{
privateRealServiceservice=newRealService();
publicvoidmethod(){
Service.java
publicinterfaceService{
voidmethod();
RealService.java
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.Random;
publicclassRealServiceimplementsService{
try{
Datedate=newDate();
//format对象是用来以指定的时间格式格式化时间的
SimpleDateFormatfrom=newSimpleDateFormat("
yyyy-MM-ddHH:
mm:
ss"
//这里的格式可以自己设置
//format()方法是用来格式化时间的方法
Stringtimes=from.format(date);
System.out.println("
方法method()被调用,调用时间为:
"
+times);
//用来产生除零异常来模拟method方法调用是否成功
Randomrandom=newRandom();
inta=random.nextInt(100);
intb=random.nextInt(10);
@SuppressWarnings("
unused"
)
intc=a/b;
方法method()成功调用"
}catch(Exceptione){
//TODO:
handleexception
方法method()调用失败"
}
}}
3.类图:
packagedm.chainofresponsibility;
LeaderobjDirector,objDepartmentManager,objGeneralManager;
objDirector=newDirector("
张三"
objDepartmentManager=newManager("
李四"
objGeneralManager=newGeneralManager("
王五"
objDirector.setSuccessor(objDepartmentManager);
objDepartmentManager.setSuccessor(objGeneralManager);
---------------------------------------------"
PurchaseRequestshopping1=newPurchaseRequest(10000.00,"
购买打印纸"
objDirector.handleRequest(shopping1);
PurchaseRequestshopping2=newPurchaseRequest(80000.00,"
办公室配置空调"
objDirector.handleRequest(shopping2);
PurchaseRequestshopping3=newPurchaseRequest(150000.00,"
车间维修"
objDirector.handleRequest(shopping3);
PurchaseRequestshopping4=newPurchaseRequest(10000000.00,"
收购RL公司"
objDirector.handleRequest(shopping4);
PurchaseRequest.java
publicclassPurchaseRequest{
privatedoublebillMoney;
privateStringreason;
publicPurchaseRequest(doublebillMoney,Stringreason){
this.billMoney=billMoney;
this.reason=reason;
publicdoublegetBillMoney(){
returnbillMoney;
publicvoidsetBillMoney(doublebillMoney){
publicStringgetReason(){
returnreason;
publicvoidsetReason(Stringreason){
Leader.java
publicabstractclassLeader{
protectedStringname;
protectedLeadersuccessor;
publicvoidsetSuccessor(Leaderseccessor){
this.successor=seccessor;
publicLeader(Stringname){
this.name=name;
publicabstractvoidhandleRequest(PurchaseRequestrequest);
Manager.java
publicclassManagerextendsLeader{
publicManager(Stringname){
super(name);
publicvoidhandleRequest(PurchaseRequestrequest){
if(request.getBillMoney()<
100000.00){
总经理"
+name+"
处理物资采购:
+request.getReason()
+"
,批准采购资金为:
+request.getBillMoney()+"
RMB"
}else{
if(this.successor!
=null){
this.successor.handleRequest(request);
}
GeneralManager.java
publicclassGeneralManagerextendsLeader{
publicGeneralManager(Stringname){
500000.00){
董事会将开会处理物资采购:
Director.java
publicclassDirectorextendsLeader{
publicDirector(Stringname){
50000.00){
主任"
4.类图:
实现代码:
packagemand;
BoardScreenscreen=newBoardScreen();
Menumenu=newMenu();
MenuItemopen=newMenuItem("
open"
newOpenCommand(screen));
MenuItemcreate=newMenuItem("
create"
newCreateCommand(screen));
MenuItemedit=newMenuItem("
edit"
newEditCommand(screen));
menu.addMenu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 实验 讲解