当前位置:文档之家› 软件设计模式大作业样例

软件设计模式大作业样例

设计模式大作业课程名称:软件设计模式设计题目:公司经费申请院系:计算机科学与信息工程学院学生姓名:学号:专业班级:软件工程13-1指导教师:**2016年6月软件设计模式任务书目录一、系统目标 ...................................................................................... 错误!未定义书签。

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. 需求分析根据问题的描述,可以确定系统的大致业务逻辑。

如下:需要申请活动费用,按照固定工作流程进行申请,给出申请金额,由领导根据各自的职责权限进行审核,并将结果告知申请人,财务部根据结果给予拨款。

将结果返回到客户端,呈现给用户。

2.选用设计模式根据需求分析,该公司经费申请可以采用到三种设计模式,分别是模板方法模式,职责链模式,观察者模式。

(1)模板方法模式采用模板方法模式的原因是它定义了一个操作中算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

公司申请活动经费的流程是固定的,由申请人先填写申请单,然后交给领导审批,最后得到审批结果,作出相应行动。

用模板方法模式使其结构清晰,提高了代码的复用性。

模式结构图如图1-1:图1-1 模板方法模式结构图(2)职责链模式采用职责链模式的主要原因是对于审核经费申请单,由上级领导进行处理,而不同级别的领导,对于审批的额度是不一样的。

职责链模式避免请求发送者和接收者耦合在一起,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

这样降低了耦合度,简化对象的相互连接,增强给对象指派职责的灵活性。

模式结构图如图1-2:图1-2职责链模式结构图(3)观察者模式采用观察者模式的主要原因是可以实现表示层和数据逻辑层的分离,并定义可稳定的消息更新传递机制,抽象了更新接口。

在观察目标和观察者之间建立一个抽象的耦合。

模式结构图如图1-3:图1-3观察者模式结构图三、系统设计1.系统功能模块设计根据需求分析,公司经费申请可分为三个模块,主要如下:◆申请人填写经费申请单:向上级领导提交申请。

◆领导审核:根据职责权限不同,按各自的管理范围一一送派审核。

◆收到审核结果通知:收到上级领导对经费申请单批准与否的信息。

图2-1 公司经费申请模块四、系统实现1.模板方法模式和其实现类模板方法模式贯穿在整个系统中,公司经费申请由三个具体部分组成,填写申请单,经领导审批,最后接收到通知。

模板方法模式贯穿整个工作模块,实现代码如下:public abstract class ApplicationForFunds{public void apply(){System.out.println("填写申请单");}public abstract void toExamine();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){=name;}public void setSuccessor(Leader successor)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{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;}public void setMoney(int money) {this.money = money;}public String getReplyName() {return (this.replyName);}public int getMoney() {return (this.money);}}3. 观察者模式和其实现类观察者模式可以实现表示层和数据逻辑层的分离,并定义可稳定的消息更新传递机制,抽象了更新接口。

相关主题