软件设计模式大作业样例.docx
- 文档编号:27632657
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:18
- 大小:132.05KB
软件设计模式大作业样例.docx
《软件设计模式大作业样例.docx》由会员分享,可在线阅读,更多相关《软件设计模式大作业样例.docx(18页珍藏版)》请在冰豆网上搜索。
软件设计模式大作业样例
设计模式大作业
课程名称:
软件设计模式
设计题目:
公司经费申请
院系:
计算机科学与信息工程学院
学生姓名:
学号:
专业班级:
软件工程13-1
******
2016年6月
软件设计模式任务书
设计题目
公司经费申请
学生姓名
所在院系
计算机科学与信息工程学院
专业、年级、班
软件工程13-1
设计要求:
1.设计一个应用场景,最少使用所学过的三种设计模式解决一个实际问题。
一人一题,不可重复。
2.应用场景设计要合理,模式选择要适当。
3.要求给出系统模式结构图,主要类的设计代码。
4.编写验证程序,在验证程序中要在显著位置显示个人信息。
学生应完成的工作:
1.应用场景:
公司经费申请,可以了解申请经费的具体流程,由申请人先填写申请单,然后交给领导审批,如果申请批准下来,领导会通知申请人审批通过,然后申请人去财务领取费用,如果没有批准下来,领导会通知申请人审批未通过。
不同级别的领导,对于审批的额度是不一样的,比如,项目经理只能审批500元以内的申请;部门经理能审批1000元以内的申请;而总经理可以审核3000元以内的申请,否则不通过。
2.设计模式:
模板方法模式,职责链模式,观察者模式。
(1)模板方法模式:
定义了一个操作中算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
(2)职责链模式:
不同级别的领导,对于审批的额度不一样,使其各自的职责权限更加清晰明了。
(3)观察者模式:
一个对象状态发生改变时,其相应依赖对象得到通知并自动更新。
3.实现代码:
使用java语言实现所有功能。
参考文献阅读:
[1]徐宏喆,侯迪等编著,实用软件设计模式教程[M],清华大学出版社。
[2]颜炯编著,C#设计模式[M],中国电力出版社。
[3]程杰,大话设计模式,北京:
机械工业出版社,2008。
[4]设计模式——可复用面向对象软件的基础,北京:
机械工业出版社。
[5][美]AlanShalloway著,设计模式精解[M],清华大学出版社。
工作计划:
1.审题,查阅资料,进行设计前的必要资料准备(3天)。
2.把程序完整运行出来(4天)。
3.增加改进程序(3天)。
4.写课程设计报告(3天)。
5.提交课程设计报告(1天)。
任务下达日期:
2015年6月9日
任务完成日期:
2015年6月22日
指导教师(签名):
高原学生(签名):
代小雪
一、系统目标
1.设计目的
通过本课程设计,加深对软件设计课程的理解,熟练掌握和巩固所学的各种设计模式,培养自我动手、查阅技术文献、资料、手册以及编写技术文献的能力。
通过运用设计模式来解决实际系统中遇到的问题,从而具备利用计算机编程分析解决综合性实际问题的初步能力。
2.需求描述
本系统的主要目的在与应用设计模式解决公司经费申请问题,可以了解申请经费的具体流程为申请人先填写申请单,然后交给领导审批,如果申请批准下来,领导会通知申请人审批通过,然后申请人去财务领取费用,财务部给于其拨款,如果没有批准下来,领导会通知申请人审批未通过。
不同级别的领导,对于审批的额度是不一样的,比如,项目经理只能审批500元以内的申请;部门经理能审批1000元以内的申请;而总经理可以审核3000元以内的申请,否则不通过。
系统中总共用到三种设计模式,分别是模板方法模式,职责链模式,观察者模式。
模板方法模式定义了一个操作中算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
申请经费的具体流程是固定的,写申请单,审核,得到通知这三个过程,只是审核过程不同。
职责链模式鉴于不同级别的领导,对于审批的额度是不一样,使其各自的职责权限更加清晰明了。
观察者模式是一种一对多依赖关系,一个对象状态发生改变时,其相应依赖对象得到通知并自动更新。
二、系统模块选择
1.需求分析
根据问题的描述,可以确定系统的大致业务逻辑。
如下:
需要申请活动费用,按照固定工作流程进行申请,给出申请金额,由领导根据各自的职责权限进行审核,并将结果告知申请人,财务部根据结果给予拨款。
将结果返回到客户端,呈现给用户。
2.选用设计模式
根据需求分析,该公司经费申请可以采用到三种设计模式,分别是模板方法模式,职责链模式,观察者模式。
(1)模板方法模式
采用模板方法模式的原因是它定义了一个操作中算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
公司申请活动经费的流程是固定的,由申请人先填写申请单,然后交给领导审批,最后得到审批结果,作出相应行动。
用模板方法模式使其结构清晰,提高了代码的复用性。
模式结构图如图1-1:
图1-1模板方法模式结构图
(2)职责链模式
采用职责链模式的主要原因是对于审核经费申请单,由上级领导进行处理,而不同级别的领导,对于审批的额度是不一样的。
职责链模式避免请求发送者和接收者耦合在一起,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
这样降低了耦合度,简化对象的相互连接,增强给对象指派职责的灵活性。
模式结构图如图1-2:
图1-2职责链模式结构图
(3)观察者模式
采用观察者模式的主要原因是可以实现表示层和数据逻辑层的分离,并定义可稳定的消息更新传递机制,抽象了更新接口。
在观察目标和观察者之间建立一个抽象的耦合。
模式结构图如图1-3:
图1-3观察者模式结构图
三、系统设计
1.系统功能模块设计
根据需求分析,公司经费申请可分为三个模块,主要如下:
◆申请人填写经费申请单:
向上级领导提交申请。
◆领导审核:
根据职责权限不同,按各自的管理范围一一送派审核。
◆收到审核结果通知:
收到上级领导对经费申请单批准与否的信息。
图2-1公司经费申请模块
四、系统实现
1.模板方法模式和其实现类
模板方法模式贯穿在整个系统中,公司经费申请由三个具体部分组成,填写申请单,经领导审批,最后接收到通知。
模板方法模式贯穿整个工作模块,实现代码如下:
publicabstractclassApplicationForFunds
{
publicvoidapply()
{
System.out.println("填写申请单");
}
publicabstractvoidtoExamine();
publicvoidevaluate()
{
System.out.println("得到通知");
}
publicvoidprocess()
{
this.apply();
this.toExamine();
this.evaluate();
}
}
publicclassActivityFundextendsApplicationForFunds
{
publicvoidtoExamine()
{
System.out.println("活动经费");
}
}
publicclassProjectFundextendsApplicationForFunds
{
publicvoidtoExamine()
{
System.out.println("项目经费");
}
}
2.职责链模式和其实现类
职责链模式避免请求发送者和接收者耦合在一起,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
主要解决的是上级领导中的那个具体人来实现审核工作。
职责链模式来完成领导审核模块,实现代码如下:
publicabstractclassLeader
{
protectedStringname;
protectedLeadersuccessor;
publicLeader(Stringname)
{
this.name=name;
}
publicvoidsetSuccessor(Leadersuccessor)
{
this.successor=successor;
}
publicabstractvoidhandleRequest(Funtsrequest);
}
publicclassDivisionManagerextendsLeader
{
publicDivisionManager(Stringname)
{
super(name);
}
publicvoidhandleRequest(Funtsrequest)
{
if(request.getMoney()<1000)
{
System.out.println("部门经理"+name+"审批"+request.getReplyName()+"员工的活动经费,经费为"+request.getMoney()+"元。
可去财务部领取费用。
");
}
else
{
if(this.successor!
=null)
{
this.successor.handleRequest(request);
}
}
}
}
publicclassGeneralManagerextendsLeader
{
publicGeneralManager(Stringname)
{
super(name);
}
publicvoidhandleRequest(Funtsrequest)
{
if(request.getMoney()<3000)
{
System.out.println("总经理"+name+"审批员工"+request.getReplyName()+"员工的活动经费,经费为"+request.getMoney()+"元。
可去财务部领取费用。
");
}
else
{
System.out.println(request.getReplyName()+"员工的活动经费为"+request.getMoney()+"元,由于其经费要求太高将不予批准!
!
");
}
}
}
publicclassProjectManagerextendsLeader
{
publicProjectManager(Stringname)
{
super(name);
}
publicvoidhandleRequest(Funtsrequest)
{
if(request.getMoney()<500)
{
System.out.println("项目经理"+name+"审批"+request.getReplyName()+"员工的活动经费,经费为"+request.getMoney()+"元。
可去财务部领取费用。
");
}
else
{
if(this.successor!
=null)
{
this.successor.handleRequest(request);
}
}
}
}
publicclassFunts
{
privateStringreplyName;
privateintmoney;
publicFunts(StringreplyName,intmoney)
{
this.replyName=replyName;
this.money=money;
}
publicvoidsetReplyName(StringreplyName){
this.replyName=replyName;
}
publicvoidsetMoney(intmoney){
this.money=money;
}
publicStringgetReplyName(){
return(this.replyName);
}
publicintgetMoney(){
return(this.money);
}
}
3.观察者模式和其实现类
观察者模式可以实现表示层和数据逻辑层的分离,并定义可稳定的消息更新传递机制,抽象了更新接口。
在观察目标和观察者之间建立一个抽象的耦合。
观察者模式来完成接收到审核通知模块,实现代码如下:
importjava.util.*;
publicabstractclassMySubject
{
protectedArrayListobservers=newArrayList();
//注册方法
publicvoidattach(MyObserverobserver)
{
observers.add(observer);
}
//注销方法
publicvoiddetach(MyObserverobserver)
{
observers.remove(observer);
}
publicabstractvoidpass();//抽象通知方法
}
publicinterfaceMyObserver
{
voidresponse();//抽象响应方法
}
publicclassCheckextendsMySubject
{
publicvoidpass()
{
System.out.println("审核通过!
");
System.out.println("----------------------------");
for(Objectobs:
observers)
{
((MyObserver)obs).response();
}
}
}
publicclassApplyPeopleimplementsMyObserver
{
publicvoidresponse()
{
System.out.println("申请人去财务部领取资金!
");
}
}
publicclassGiveFuntimplementsMyObserver
{
publicvoidresponse()
{
System.out.println("财务部拨给申请人相应资金!
");
}
}
4.事件处理程序
事件处理程序的代码如下:
publicclassClient
{
publicstaticvoidmain(Stringa[])
{LeaderobjProjectManager,objDivisionManager,objGeneralManager;
ApplicationForFundsbank;
bank=(ApplicationForFunds)XMLUtil.getBean();
bank.process();
System.out.println("---------------------------------------");
objProjectManager=newProjectManager("王明");
objDivisionManager=newDivisionManager("赵强");
objGeneralManager=newGeneralManager("李波");
objProjectManager.setSuccessor(objDivisionManager);
objDivisionManager.setSuccessor(objGeneralManager);
Funtslr1=newFunts("第一小组",450);
objProjectManager.handleRequest(lr1);
Funtslr2=newFunts("第二小组",3200);
objProjectManager.handleRequest(lr2);
Funtslr3=newFunts("第三小组",1500);
objProjectManager.handleRequest(lr3);
Funtslr4=newFunts("第四小组",900);
objProjectManager.handleRequest(lr4);
MySubjectsubject=newCheck();
MyObserverobs1,obs2,obs3;
obs1=newGiveFunt();
obs2=newGiveFunt();
obs3=newApplyPeople();
subject.attach(obs1);
subject.attach(obs2);
subject.attach(obs3);
subject.pass();
}
}
五、系统设计总结
1.实现的功能和优点
该公司经费申请主要实现的是公司经费申请的具体流程和实现过程,运用到的设计模式有模板方法模式,职责链模式和观察者模式。
职责链模式根据审核经费申请单经费的多少,由不同级别的领导进行审批。
观察者模式可以实现表示层和数据逻辑层的分离,并定义可稳定的消息更新传递机制,抽象了更新接口。
模板方法模式为整个业务流程应用的该模式,客户端只需访问,而无需知道具体如何实现。
该管理系统的优点就是代码的复用率很高,合理的运用了这三种设计模式,各个模块的层次都很清晰,如果想要添加新的模块,不需要更改很多代码,直接在原有代码基础上进行继承实现就行,减少了开发成本。
2.不足之处
不足之处就是在本系统中的各个功能比较简单。
使用的设计模式相对来讲比较少,只用到了模板方法模式,职责链模式和观察者模式。
只实现了活动经费的申请过程,得到通知的后的行为也相对简单,连接不是太紧凑,有很多需要改进的地方。
3.完成心得
设计这个公司费用申请系统花了很长时间,但是自己觉得很值得,通过设计和实现此系统,初步掌握了面向对象程序设计的基本思维。
要想程序的复用性高,后期维护方便就必须在进行设计的时候,采用合适的设计模式,将具体的抽象出来,较好的提高系统的可扩展性。
在模式设计上,主要还是得理解各个模式的基本思想和特点,以及各个模式的各种适用场景,之后就得针对具体的场景然后采用相应的设计模式进行设计,开发和编码。
在此非常感谢高老师的辅导和同学的帮助,最终此系统所实现的功能,所以非常感谢大家。
相信只要多加锻炼,多写代码,多实现,编程能力会越来越好。
六、参考文献
参考文献
[1]徐宏喆,侯迪等编著,实用软件设计模式教程[M],清华大学出版社。
[2]颜炯编著,C#设计模式[M],中国电力出版社。
[3]程杰,大话设计模式,北京:
机械工业出版社,2008。
[4]设计模式——可复用面向对象软件的基础,北京:
机械工业出版社。
[5][美]AlanShalloway著,设计模式精解[M],清华大学出版社。
指导教师评语:
1、设计报告:
a、内容:
不完整□完整□详细□
b、方案设计:
较差□合理□非常合理□
c、实现:
未实现□部分实现□全部实现□
d、文档格式:
不规范□基本规范□规范□
2、考勤:
全勤□缺勤次
设计报告成绩:
,占总成绩比例:
80%
考勤成绩:
,占总成绩比例:
20%
总成绩:
。
指导教师签字:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件设计 模式 作业