设计模式大作业
课程名称:
软件设计模式
设计题目:公司经费申请
院
系: 计算机科学与信息工程学院
学生姓名:
学
号:
专业班级:
指导教师:
软件工程 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] [美]Alan Shalloway 著,设计模式精解[M],清华大学出版社。
工作计划:
1. 审题,查阅资料,进行设计前的必要资料准备(3 天)。
2. 把程序完整运行出来(4 天)。
3. 增加改进程序(3 天)。
4. 写课程设计报告(3 天)。
5. 提交课程设计报告(1 天)。
任务下达日期: 2015 年 6 月 9 日
任务完成日期: 2015 年 6 月 22 日
指导教师(签名): 高原
学生(签名): 代小雪
目录
一、 系统目标........................................................................................ 错误!未定义书签。
1. 设计目的.......................................................................................... 错误!未定义书签。
2. 需求描述.......................................................................................... 错误!未定义书签。
二、系统模块选择................................................................................. 错误!未定义书签。
1. 需求分析.......................................................................................... 错误!未定义书签。
2. 选用设计模式................................................................................................................2
(1)模板方法模式....................................................................................................2
(2)职责链模式.......................................................................... 错误!未定义书签。
(3)观察者模式........................................................................................................3
三、 系统设计......................................................................................................................4
1. 系统功能模块设计........................................................................................................4
四、 系统实现......................................................................................................................5
1.模板方法模块及其实现类..............................................................................................5
2.职责链模块及其实现类..................................................................................................6
3.观察者模块及其实现类..................................................................................................9
4.事件处理程序................................................................................................................10
五、 系统设计总结.......................................................................................................... 11
1. 实现的功能和优点...................................................................................................... 11
2. 不足之处......................................................................................................................12
3. 完成心得......................................................................................................................12
六、 参考文献....................................................................................................................12
参考文献...........................................................................................................................12
一、系统目标
1. 设计目的
通过本课程设计,加深对软件设计课程的理解,熟练掌握和巩固所学的各种
设计模式,培养自我动手、查阅技术文献、资料、手册以及编写技术文献的能力。
通过运用设计模式来解决实际系统中遇到的问题,从而具备利用计算机编程分析
解决综合性实际问题的初步能力。
2. 需求描述
本系统的主要目的在与应用设计模式解决公司经费申请问题,可以了解申
请经费的具体流程为申请人先填写申请单,然后交给领导审批,如果申请批准下
来,领导会通知申请人审批通过,然后申请人去财务领取费用,财务部给于其拨
款,如果没有批准下来,领导会通知申请人审批未通过。不同级别的领导,对于
审批的额度是不一样的,比如,项目经理只能审批 500 元以内的申请;部门经理
能审批 1000 元以内的申请;而总经理可以审核 3000 元以内的申请,否则不通过。
系统中总共用到三种设计模式,分别是模板方法模式,职责链模式,观察者模式。
模板方法模式定义了一个操作中算法的骨架,而将一些步骤延迟到子类中,
使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。申请经
费的具体流程是固定的,写申请单,审核,得到通知这三个过程,只是审核过程
不同。职责链模式鉴于不同级别的领导,对于审批的额度是不一样,使其各自的
职责权限更加清晰明了。观察者模式是一种一对多依赖关系,一个对象状态发生
改变时,其相应依赖对象得到通知并自动更新。
二、 系统模块选择
1. 需求分析
根据问题的描述,可以确定系统的大致业务逻辑。如下:需要申请活动费用,
按照固定工作流程进行申请,给出申请金额,由领导根据各自的职责权限进行审
核,并将结果告知申请人,财务部根据结果给予拨款。将结果返回到客户端,呈
现给用户。
1
2. 选用设计模式
根据需求分析,该公司经费申请可以采用到三种设计模式,分别是模板方法
模式,职责链模式,观察者模式。
(1) 模板方法模式
采用模板方法模式的原因是它定义了一个操作中算法的骨架,而将一些步骤
延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特
定步骤。公司申请活动经费的流程是固定的,由申请人先填写申请单,然后交给
领导审批,最后得到审批结果,作出相应行动。用模板方法模式使其结构清晰,
提高了代码的复用性。模式结构图如图 1-1:
图 1-1 模板方法模式结构图
(2)职责链模式
采用职责链模式的主要原因是对于审核经费申请单,由上级领导进行处理,
而不同级别的领导,对于审批的额度是不一样的。职责链模式避免请求发送者和
接收者耦合在一起,将这些对象连接成一条链,并且沿着这条链传递请求,直到
有对象处理它为止。这样降低了耦合度,简化对象的相互连接,增强给对象指派
职责的灵活性。模式结构图如图 1-2:
2
图 1-2 职责链模式结构图
(3)观察者模式
采用观察者模式的主要原因是可以实现表示层和数据逻辑层的分离,并定义
可稳定的消息更新传递机制,抽象了更新接口。在观察目标和观察者之间建立一
个抽象的耦合。模式结构图如图 1-3:
图 1-3 观察者模式结构图
3
三、 系统设计
1. 系统功能模块设计
根据需求分析,公司经费申请可分为三个模块,主要如下:
申请人填写经费申请单:向上级领导提交申请。
领导审核:根据职责权限不同,按各自的管理范围一一送派审核。
收到审核结果通知:收到上级领导对经费申请单批准与否的信息。
公司经费申请
填
写
经
费
申
请
单
领
导
审
核
收
到
审
核
结
果
图 2-1 公司经费申请模块
四、 系统实现
1. 模板方法模式和其实现类
模板方法模式贯穿在整个系统中,公司经费申请由三个具体部分组成,填写
申请单,经领导审批,最后接收到通知。
模板方法模式贯穿整个工作模块,实现代码如下:
public abstract class ApplicationForFunds
{
public void apply()
{
System.out.println("填写申请单");
}
public abstract void toExamine();
4
public void evaluate()
{
System.out.println("得到通知");
}
public void process()
{
this.apply();
this.toExamine();
this.evaluate();
}
}
public class ActivityFund extends ApplicationForFunds
{
public void toExamine()
{
System.out.println("活动经费");
}
}
public class ProjectFund extends ApplicationForFunds
{
public void toExamine()
{
System.out.println("项目经费");
}
}
2. 职责链模式和其实现类
职责链模式避免请求发送者和接收者耦合在一起,将这些对象连接成一条
链,并且沿着这条链传递请求,直到有对象处理它为止。主要解决的是上级领导
中的那个具体人来实现审核工作。
职责链模式来完成领导审核模块,实现代码如下:
public abstract class Leader
{
protected String name;
protected Leader successor;
public Leader(String name)
{
this.name=name;
}
public void setSuccessor(Leader successor)
5