实验(上机)十责任链模式
实验(上机)目的
1、练习使用行为型设计模式;
2、练习使用责任链模式的设计思路;
3、练习使用责任链模式实现“业务审批流程”案例的实现。
实验(上机)课时
2学时
实验(上机)环境
JDK1.8EclipMars
预备知识
1、行为型模式;
2、职责链模式概述;
3、职责链模式的结构与实现;
4、职责链模式的应用实例;
5、纯与不纯的职责链模式;
6、职责链模式的优缺点与适用环境。
实验(上机)内容
某企业的SCM(SupplyChainManagement,供应链管理)系统中包含一个
采购审批子系统。该企业的采购审批是分级进行的,即根据采购金额的不同由
不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采
购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事
长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的
采购单就需要开董事会讨论决定。如下图所示:
采购人员
采购单
主任
副董事长董事长
董事会
金额<5万元
5万元≤金额<10万元
10万元≤金额<50万元
金额≥50万元
采购单分级审批示意图
现使用职责链模式设计并实现该系统。
新建解决方案,新建一个控制台应用程序,编写责任模式实现代码,实现
以上需求的案例,要求编写为控制台应用程序,并能调试运行。
实验(上机)步骤
1、本实例类图:
successor
Approver
{abstract}
##successor
name
:Approver
:string
+
+
+
Approver(stringname)
SetSuccessor(Approversuccessor)
ProcessRequest(PurchaRequestrequest)
...
:void
:void
Director
+
+
Director(stringname)
ProcessRequest(PurchaRequestrequest)
...
:void
Congress
+
+
Congress(stringname)
ProcessRequest(PurchaRequestrequest)
...
:void
PurchaRequest
-
-
-
+
+
+
<
<
<
<
<
<
amount
number
purpo
Amount
Number
Purpo
:double
:int
:string
:double
:int
:string
+
+
+
+
+
+
+
<
<
<
<
<
<
PurchaRequest(doubleamount,
intnumber,stringpurpo)
t_Amount(doublevalue)
get_Amount()
t_Number(intvalue)
get_Number()
t_Purpo(stringvalue)
get_Purpo()
...
:void
:double
:void
:int
:void
:string
VicePresident
+
+
VicePresident(stringname)
ProcessRequest(PurchaRequestrequest)
...
:void
President
+
+
President(stringname)
ProcessRequest(PurchaRequestrequest)
...
:void
2、创建ChainOfResponsibility的工程,并根据模式的角色创建对应的包。
3、创建PurchaRequest采购单类,充当请求类
packageApplication;
publicclassPurchaRequest{
//采购金额
privatedoubleamount;
//采购单编号
privateintnumber;
//采购目的
privateStringpurpo;
publicPurchaRequest(doubleamount,intnumber,Stringpurpo)
{
=amount;
=number;
e=purpo;
}
publicdoublegetAmount(){
returnamount;
}
publicvoidtAmount(doubleamount){
=amount;
}
publicintgetNumber(){
returnnumber;
}
publicvoidtNumber(intnumber){
=number;
}
publicStringgetPurpo(){
returnpurpo;
}
publicvoidtPurpo(Stringpurpo){
e=purpo;
}
}
4、创建Approver审批者类,充当抽象处理者
packageHandler;
Request;
publicabstractclassApprover{
//定义后继对象
protectedApproversuccessor;
//审批者姓名
protectedStringname;
publicApprover(Stringname){
=name;
}
//设置后继者
publicvoidSetSuccessor(Approversuccessor){
sor=successor;
}
//抽象请求处理方法
publicabstractvoidProcessRequest(PurchaRequestrequest);
}
5、创建Director主任类,充当具体处理者
packageConcreteHandler;
Request;
er;
publicclassDirectorextendsApprover{
publicDirector(Stringname){
super(name);
}
publicvoidProcessRequest(PurchaRequestrequest){
if(unt()<50000){
//处理请求
("主任"+name+"审批采购单:"+
ber());
(",金额:"+unt()+"元,");
n("采购目的:"+po()+"。
");
}el{
//转发请求
sRequest(request);
}
}
}
6、创建VicePresident副董事长类,充当具体处理者
packageConcreteHandler;
Request;
er;
publicclassVicePresidentextendsApprover{
publicVicePresident(Stringname){
super(name);
}
publicvoidProcessRequest(PurchaRequestrequest){
if(unt()<100000){
//处理请求
("副董事长"+name+"审批采购单:"+
ber());
(",金额:"+unt()+"元,");
n("采购目的:"+po()+"。
");
}el{
//转发请求
sRequest(request);
}
}
}
7、创建President董事长类,充当具体处理者
packageConcreteHandler;
Request;
er;
publicclassPresidentextendsApprover{
publicPresident(Stringname){
super(name);
}
publicvoidProcessRequest(PurchaRequestrequest){
if(unt()<500000){
//处理请求
("董事长"+name+"审批采购单:"+
ber());
(",金额:"+unt()+"元,");
n("采购目的:"+po()+"。
");
}el{
//转发请求
sRequest(request);
}
}
}
8、Congress:董事会类,充当具体处理者
packageConcreteHandler;
Request;
er;
publicclassCongresxtendsApprover{
publicCongress(Stringname){
super(name);
}
publicvoidProcessRequest(PurchaRequestrequest){
//处理请求
("召开董事会审批采购单:"+ber());
(",金额:"+unt()+"元,");
n("采购目的:"+po()+"。");
}
}
9、Program:客户端测试类
packageTest;
Request;
ss;
or;
ent;
esident;
er;
publicclassClient{
publicstaticvoidmain(String[]args){
Approverwjzhang=newDirector("张无忌");
Approvergyang=newVicePresident("杨过");
Approverjguo=newPresident("郭靖");
Approvermeeting=newCongress("董事会");
//创建职责链
cessor(gyang);
cessor(jguo);
cessor(meeting);
//创建采购单
PurchaRequestpr1=newPurchaRequest(45000,10001,"购买倚天
剑");
sRequest(pr1);
PurchaRequestpr2=newPurchaRequest(60000,10002,"购买大金
雕");
sRequest(pr2);
PurchaRequestpr3=newPurchaRequest(160000,10003,"购买《降
龙十八掌》");
sRequest(pr3);
PurchaRequestpr4=newPurchaRequest(800000,10004,"购买桃
花岛");
sRequest(pr4);
}
}
10、结果及分析,编译并运行程序,输出结果如下:
结束
考核内容
1、上交各自建立的电子版解决方案及项目。
2、用EA建模工具编制以上类图。
3、上交实验报告。
本文发布于:2022-11-24 08:05:24,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/10474.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |