设计模式上机实验二实验报告之令狐文艳创作Word下载.docx
- 文档编号:16950813
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:18
- 大小:18.94KB
设计模式上机实验二实验报告之令狐文艳创作Word下载.docx
《设计模式上机实验二实验报告之令狐文艳创作Word下载.docx》由会员分享,可在线阅读,更多相关《设计模式上机实验二实验报告之令狐文艳创作Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
1.提供装饰模式结构图及实现代码;
2.提供外观模式结构图及实现代码;
3.提供代理模式结构图及实现代码;
4.提供职责链模式结构图及实现代码;
5.提供命令模式结构图及实现代码;
6.提供迭代器模式结构图及实现代码;
7.提供观察者模式结构图及实现代码;
8.提供状态模式结构图及实现代码;
9.提供策略模式结构图及实现代码;
10.提供模板方法模式结构图及实现代码。
六、实验结果
(1)装饰模式
某图书管理系统中,书籍类(Book)具有借书方法borrowBook()和还书方法returnBook()。
现需要动态给书籍对象添加冻结方法freeze()和遗失方法lose()。
使用装饰模式设计该系统,绘制类图并编程实现。
packageDirectorPattern;
interfaceBook
{
voidborrowBook();
voidreturnBook();
}
finalclassMyBookimplementsBook
publicvoidborrowBook(){
System.out.println("
MyBookborrowing!
"
);
}
publicvoidreturnBook(){
MyBookreturning!
}
abstractclassBookDirectorimplementsBook
privateBookbook;
publicBookDirector(Bookbook)
{
Bookdirectoring!
this.book=book;
book.borrowBook();
book.returnBook();
classNewBookextendsBookDirector
publicNewBook(Bookbook)
super(book);
BookchangedtoNewBook!
publicvoidfreeze()
Bookfreezing!
publicvoidlose()
Booklost!
publicclassBookDirectorClient{
publicstaticvoidmain(Stringa[])
//半透明
Bookbook=newMyBook();
NewBooknewBook=newNewBook(book);
newBook.borrowBook();
newBook.returnBook();
newBook.freeze();
newBook.lose();
运行结果:
(2)外观模式
在电脑主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法,如内存(Memory)的自检(check()),CPU的运行(run()),硬盘(HardDisk)的读取(read()),操作系统(OS)的载入(load())等,如果某一过程发生错误则电脑启动失败。
使用外观模式模拟该过程,绘制类图并编程实现。
packageFacadePattern;
classMainframe{
privateMemorymemory;
privateCPUcpu;
privateHardDiskdisk;
privateOSos;
publicMainframe()
memory=newMemory();
cpu=newCPU();
disk=newHardDisk();
os=newOS();
publicvoidon()
memory.check();
cpu.run();
disk.read();
os.load();
publicvoidoff()
memory.off();
cpu.off();
disk.off();
os.off();
classMemory
{
publicvoidcheck()
System.out.println("
Memorychecking!
publicvoidoff()
Memoryoff!
classCPU
publicvoidrun()
CPUrunning!
CPUoff!
classHardDisk
publicvoidread()
HardDiskreading!
HardDiskoff!
classOS
publicvoidload()
OSloading!
OSoff!
publicclassComputerFacadeClient
publicstaticvoidmain(Stringargs[])
Mainframemainframe=newMainframe();
mainframe.on();
-----------------------"
mainframe.off();
(3)代理模式
应用软件所提供的桌面快捷方式是快速启动应用程序的代理,桌面快捷方式一般使用一张小图片来表示(Picture),通过调用快捷方式的run()方法将调用应用软件(Application)的run()方法。
使用代理模式模拟该过程,绘制类图并编程实现。
packageProxyPattern;
interfaceSoftware
voidrun();
classApplicationimplementsSoftware
Applicationisrunning!
;
classPictureimplementsSoftware
privateApplicationapp=newApplication();
publicvoidrun(){
app.run();
publicclassFastwayProxyClient
Softwareproxy=newPicture();
proxy.run();
(4)职责链模式
某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开会确定。
现使用职责链模式设计该系统,绘制类图并编程实现。
packageChainResponsibilityPattern;
classShoppingRequest
privateStringshoppingReason;
privatedoublebillMoney;
publicShoppingRequest(StringshoppingReason,doublebillMoney)
this.shoppingReason=shoppingReason;
this.billMoney=billMoney;
publicStringgetShoppingReason(){
returnshoppingReason;
publicvoidsetShoppingReason(StringshoppingReason){
this.shoppingReason=shoppingReason;
publicdoublegetBillMoney(){
returnbillMoney;
publicvoidsetBillMoney(doublebillMoney){
this.billMoney=billMoney;
//抽象领导
abstractclassLeader
protectedStringname;
//上级领导
protectedLeadersuccessor;
publicLeader(Stringname)
this.name=name;
publicvoidsetSuccessor(Leadersuccessor)
this.successor=successor;
publicabstractvoidhandleRequest(ShoppingRequestrequest);
//主任
classDirectorextendsLeader
publicDirector(Stringname)
super(name);
publicvoidhandleRequest(ShoppingRequestrequest)
if(request.getBillMoney()<
10000.00)
{
System.out.println("
主任"
+name+"
处理物资采购:
+request.getShoppingReason()+"
,批准采购资金为:
+request.getBillMoney()+"
RMB"
}
else
if(this.successor!
=null)
{
this.successor.handleRequest(request);
}
//部门经理
classDepartmentManagerextendsLeader
publicDepartmentManager(Stringname)
50000.00)
部门经理"
+request.getBillMoney()+"
//副经理
classViceManagerextendsLeader
publicViceManager(Stringname)
100000.00)
副经理"
//总经理
classGeneralManagerextendsLeader
publicGeneralManager(Stringname)
200000.00)
总经理"
董事会将开会处理物资采购:
publicclassStoreCoRClient
LeaderobjDirector,objDepartmentManager,objViceManager,objGeneralManager;
objDirector=newDirector("
Jack"
objDepartmentManager=newDepartmentManager("
刘德华"
objViceManager=newViceManager("
张曼玉"
objGeneralManager=newGeneralManager("
成龙"
objDirector.setSuccessor(objDepartmentManager);
objDepartmentManager.setSuccessor(objViceManager);
objViceManager.setSuccessor(objGeneralManager);
ShoppingRequestshopping1=newShoppingRequest("
购买打印纸"
1000.00);
System.out.println("
----------------------------------------"
objDirector.handleRequest(shopping1);
ShoppingRequestshopping2=newShoppingRequest("
办公室配置空调"
25000.00);
objDirector.handleRequest(shopping2);
ShoppingRequestshopping3=newShoppingRequest("
更新电脑"
80000.00);
objDirector.handleRequest(shopping3);
ShoppingRequestshopping4=newShoppingRequest("
车间维修"
150000.00);
objDirector.handleRequest(shopping4);
ShoppingRequestshopping5=newShoppingRequest("
收购RL公司"
4000000.00);
objDirector.handleRequest(shopping5);
(5)命令模式
某软件公司欲开发一个基于Windows平台的公告板系统。
系统提供一个主菜单(Menu),在主菜单中包含了一些菜单项(MenuItem),可以通过Menu类的addMenuItem()方法增加菜单项。
菜单项的主要方法是click(),每一个菜单项包含一个抽象命令类,具体命令类包括OpenCommand(打开命令),CreateCommand(新建命令),EditCommand(编辑命令)等,命令类具有一个execute()方法,用于调用公告板系统界面类(BoardScreen)的open()、create()、edit()等方法。
现使用命令模式设计该系统,使得MenuItem类与BoardScreen类的耦合度降低,绘制类图并编程实现。
packageCommandPattern;
importjava.util.ArrayList;
//菜单栏
classMenu
privateArrayList<
MenuItem>
menuItemList=newArrayList<
CommandPattern.MenuItem>
();
publicvoidaddMenuItem(MenuItemitem){
this.menuItemList.add(item);
publicMenuItemgetMenuItemByName(StringitemName){
for(inti=0;
i<
menuItemList.size();
i++){
if(menuItemList.get(i).getItemName().equals(itemName)){
returnmenuItemList.get(i);
returnnull;
//请求发送者
classMenuItem
privateCommandcommand;
privateStringitemName;
MenuItem(Stringname,Commandcmd)
this.itemName=name;
mand=cmd;
publicCommandgetCommand(){
returncommand;
publicvoidsetCommand(Commandcommand){
mand=command;
publicStringgetItemName(){
returnitemName;
publicvoidsetItemName(StringitemName){
this.itemName=itemName;
publicvoidclick()
MenuItem"
+this.itemName+"
clicked!
mand.execute();
//抽象命令
interfaceCommand
voidexecute();
//请求接收者
classBoardScreen
publicvoidopen()
System
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 上机 实验 报告 令狐 创作