设计模式大作业
课程名称: 软件设计模式 设计题目:公司经费申请 院 系: 计算机科学与信息工程学院 学生姓名: 学 号: 专业班级: 软件工程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
{
this.successor=successor; }
public abstract void handleRequest(Funts request); }
public class DivisionManager extends Leader {
public DivisionManager(String name) {
super(name); }
public void handleRequest(Funts request) {
if(request.getMoney()<1000) {
System.out.println(\"部门经理\" + name + \"审批\" + request.getReplyName() + \"员工的活动经费,经费为\" + request.getMoney() + \"元。可去财务部领取费用。\");
} else {
if(this.successor!=null) {
this.successor.handleRequest(request); } } } }
public class GeneralManager extends Leader {
public GeneralManager(String name) {
super(name); }
public void handleRequest(Funts request) {
if(request.getMoney()<3000) {
System.out.println(\"总经理\" + name + \"审批员工\" + request.getReplyName() + \"员工的活动经费,经费为\" + request.getMoney() + \"元。可去财务部领取费用。\");
} else
6
{
System.out.println( request.getReplyName() + \"员工的活动经费为\" + request.getMoney() + \"元,由于其经费要求太高将不予批准!!\");
} } }
public class ProjectManager extends Leader {
public ProjectManager(String name) {
super(name); }
public void handleRequest(Funts request) {
if(request.getMoney()<500) {
System.out.println(\"项目经理\" + name + \"审批\" + request.getReplyName() + \"员工的活动经费,经费为\" + request.getMoney() + \"元。可去财务部领取费用。\");
} else {
if(this.successor!=null) {
this.successor.handleRequest(request); } } } }
public class Funts {
private String replyName; private int money;
public Funts(String replyName,int money) {
this.replyName=replyName; this.money=money; }
public void setReplyName(String replyName) { this.replyName = replyName; }
7
}
public void setMoney(int money) { this.money = money; }
public String getReplyName() { return (this.replyName); }
public int getMoney() { return (this.money); }
3. 观察者模式和其实现类
观察者模式可以实现表示层和数据逻辑层的分离,并定义可稳定的消息更新传递机制,抽象了更新接口。在观察目标和观察者之间建立一个抽象的耦合。
观察者模式来完成接收到审核通知模块,实现代码如下:
import java.util.*;
public abstract class MySubject {
protected ArrayList observers = new ArrayList();
//注册方法
public void attach(MyObserver observer) {
observers.add(observer); }
//注销方法
public void detach(MyObserver observer) {
observers.remove(observer); }
public abstract void pass(); //抽象通知方法 }
public interface MyObserver {
void response(); //抽象响应方法 }
public class Check extends MySubject {
public void pass()
8
{
System.out.println(\"审核通过!\");
System.out.println(\"----------------------------\");
for(Object obs:observers) {
((MyObserver)obs).response(); } } }
public class ApplyPeople implements MyObserver {
public void response() {
System.out.println(\"申请人去财务部领取资金!\"); } }
public class GiveFunt implements MyObserver {
public void response() {
System.out.println(\"财务部拨给申请人相应资金!\"); } }
4. 事件处理程序
事件处理程序的代码如下:
public class Client { public static void main(String a[]) {Leader objProjectManager,objDivisionManager,objGeneralManager; ApplicationForFunds bank; bank=(ApplicationForFunds)XMLUtil.getBean(); bank.process(); System.out.println(\"---------------------------------------\"); objProjectManager=new ProjectManager(\"王明\"); objDivisionManager=new DivisionManager(\"赵强\"); objGeneralManager=new GeneralManager(\"李波\"); objProjectManager.setSuccessor(objDivisionManager); objDivisionManager.setSuccessor(objGeneralManager); Funts lr1=new Funts(\"第一小组\
9
}
}
objProjectManager.handleRequest(lr1);
Funts lr2=new Funts(\"第二小组\objProjectManager.handleRequest(lr2);
Funts lr3=new Funts(\"第三小组\objProjectManager.handleRequest(lr3);
Funts lr4=new Funts(\"第四小组\objProjectManager.handleRequest(lr4); MySubject subject=new Check();
MyObserver obs1,obs2,obs3; obs1=new GiveFunt(); obs2=new GiveFunt(); obs3=new ApplyPeople();
subject.attach(obs1); subject.attach(obs2); subject.attach(obs3);
subject.pass();
五、 系统设计总结 1. 实现的功能和优点
该公司经费申请主要实现的是公司经费申请的具体流程和实现过程,运用到的设计模式有模板方法模式,职责链模式和观察者模式。职责链模式根据审核经费申请单经费的多少,由不同级别的领导进行审批。观察者模式可以实现表示层和数据逻辑层的分离,并定义可稳定的消息更新传递机制,抽象了更新接口。模板方法模式为整个业务流程应用的该模式,客户端只需访问,而无需知道具体如何实现。
该管理系统的优点就是代码的复用率很高,合理的运用了这三种设计模式,各个模块的层次都很清晰,如果想要添加新的模块,不需要更改很多代码,直接在原有代码基础上进行继承实现就行,减少了开发成本。
10
2. 不足之处
不足之处就是在本系统中的各个功能比较简单。使用的设计模式相对来讲比较少,只用到了模板方法模式,职责链模式和观察者模式。只实现了活动经费的申请过程,得到通知的后的行为也相对简单,连接不是太紧凑,有很多需要改进的地方。
3. 完成心得
设计这个公司费用申请系统花了很长时间,但是自己觉得很值得,通过设计和实现此系统,初步掌握了面向对象程序设计的基本思维。要想程序的复用性高,后期维护方便就必须在进行设计的时候,采用合适的设计模式,将具体的抽象出来,较好的提高系统的可扩展性。
在模式设计上,主要还是得理解各个模式的基本思想和特点,以及各个模式的各种适用场景,之后就得针对具体的场景然后采用相应的设计模式进行设计,开发和编码。在此非常感谢高老师的辅导和同学的帮助,最终此系统所实现的功能,所以非常感谢大家。相信只要多加锻炼,多写代码,多实现,编程能力会越来越好。
六、 参考文献
参考文献
[1] 徐宏喆,侯迪等编著,实用软件设计模式教程[M],清华大学出版社。 [2] 颜炯编著,C#设计模式[M],中国电力出版社。
[3] 程杰,大话设计模式,北京:机械工业出版社,2008。
[4] 设计模式——可复用面向对象软件的基础,北京:机械工业出版社。 [5] [美]Alan Shalloway著,设计模式精解[M],清华大学出版社。
11
指导教师评语: 1、设计报告: a、内容: 不完整□ 完整 □ 详细 □ b、方案设计: 较差 □ 合理 □ 非常合理□ c、实现: 未实现□ 部分实现□ 全部实现□ d、文档格式: 不规范□ 基本规范□ 规范 □ 2、考勤: 全勤 □ 缺勤 次 设计报告成绩: ,占总成绩比例: 80% 考 勤 成 绩: ,占总成绩比例: 20% 总 成 绩: 。 指导教师签字: 年 月 日
12
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务