首页 > 其他分享 >软件设计-职责链模式

软件设计-职责链模式

时间:2023-11-16 18:44:31浏览次数:24  
标签:职责 软件设计 System 模式 PurchaseRequest println purchaseRequest public out

软件设计                  石家庄铁道大学信息学院

 

实验15:职责链模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解职责链模式的动机,掌握该模式的结构;

2、能够利用职责链模式解决实际问题。

 
   

 

 

[实验任务一]:财务审批

某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。

实验要求:

1. 提交类图;

2. 提交源代码;

3. 注意编程规范。

 

  1. 类图:

 

 

  1. 源代码:

Approver抽象类

package fileshiyan15;

 

public abstract class Approver {

 

   

    Approver approver;

   

    String position;

 

    public Approver(String position) {

        this.position = position;

    }

 

   

 

    public void setApprover(Approver approver) {

        this.approver = approver;

    }

 

   

    public abstract void processRequest(PurchaseRequest purchaseRequest);

}

Approver抽象类

DepartmentManager

package fileshiyan15;

 

public class DepartmentManager extends Approver {

 

    public DepartmentManager(String name) {

        super(name);

    }

 

    @Override

    public void processRequest(PurchaseRequest purchaseRequest) {

        if (purchaseRequest.getPrice() > 10000 && purchaseRequest.getPrice() <= 50000) {

            System.out.println("Request ID => " + purchaseRequest.getId() + " is processed by " + this.position);

        } else {

            approver.processRequest(purchaseRequest);

        }

 

    }

}

Director

package com.gazikel;

 

public class Director extends Approver {

 

    public Director(String name) {

        super(name);

    }

 

    @Override

    public void setApprover(Approver approver) {

        super.setApprover(approver);

    }

 

    @Override

    public void processRequest(PurchaseRequest purchaseRequest) {

        if (purchaseRequest.getPrice() <= 10000) {

            System.out.println("Request ID => " + purchaseRequest.getId() + " is processed by " + this.position);

        } else {

            approver.processRequest(purchaseRequest);

        }

 

    }

}

GeneralManager

package fileshiyan15;

 

public class GeneralManager extends Approver {

 

    public GeneralManager(String name) {

        super(name);

    }

 

 

    @Override

    public void processRequest(PurchaseRequest purchaseRequest) {

        if (purchaseRequest.getPrice() > 100000 && purchaseRequest.getPrice() <= 200000) {

            System.out.println("Request ID => " + purchaseRequest.getId() + " is processed by " + this.position);

        } else {

            System.out.println("Need to convene employee meeting to determine");

        }

 

    }

}

ViceManager

package fileshiyan15;

 

public class ViceManager extends Approver {

 

    public ViceManager(String name) {

        super(name);

    }

 

    @Override

    public void processRequest(PurchaseRequest purchaseRequest) {

        if (purchaseRequest.getPrice() > 50000 && purchaseRequest.getPrice() <= 100000) {

            System.out.println("Request ID => " + purchaseRequest.getId() + " is processed by " + this.position);

        } else {

            approver.processRequest(purchaseRequest);

        }

 

    }

}

PurchaseRequest

package fileshiyan15;

 

public class PurchaseRequest {

 

    private int type;

    private float price;

    private int id;

 

    public PurchaseRequest(int type, float price, int id) {

        this.type = type;

        this.price = price;

        this.id = id;

    }

 

    public int getType() {

        return type;

    }

 

    @Override

    public String toString() {

        return this.getId() + " number of materials" + this.getPrice() + " yuan";

    }

 

    public float getPrice() {

        return price;

    }

 

    public int getId() {

        return id;

    }

}

Client

package fileshiyan15;

 

public class Client {

 

    public static void main(String[] args) {

        PurchaseRequest purchaseRequest1 = new PurchaseRequest(1, 5600, 1);

        PurchaseRequest purchaseRequest2 = new PurchaseRequest(1, 25620, 2);

        PurchaseRequest purchaseRequest3 = new PurchaseRequest(1, 96541, 3);

        PurchaseRequest purchaseRequest4 = new PurchaseRequest(1, 152345, 4);

        PurchaseRequest purchaseRequest5 = new PurchaseRequest(1, 235685, 5);

 

 

        Director director = new Director("Director");

        DepartmentManager departmentManager = new DepartmentManager("Department Manager");

        ViceManager viceManager = new ViceManager("Vice Manager");

        GeneralManager generalManager = new GeneralManager("General Manager");

 

        director.setApprover(departmentManager);

        departmentManager.setApprover(viceManager);

        viceManager.setApprover(generalManager);

 

        System.out.println(purchaseRequest1.toString());

        director.processRequest(purchaseRequest1);

        System.out.println("-------------------------------");

 

        System.out.println(purchaseRequest2.toString());

        director.processRequest(purchaseRequest2);

        System.out.println("-------------------------------");

 

        System.out.println(purchaseRequest3.toString());

        director.processRequest(purchaseRequest3);

        System.out.println("-------------------------------");

 

        System.out.println(purchaseRequest4.toString());

        director.processRequest(purchaseRequest4);

        System.out.println("-------------------------------");

 

        System.out.println(purchaseRequest5.toString());

        director.processRequest(purchaseRequest5);

        System.out.println("-------------------------------");

 

    }

 

}

标签:职责,软件设计,System,模式,PurchaseRequest,println,purchaseRequest,public,out
From: https://www.cnblogs.com/2351920019xin/p/17837012.html

相关文章

  • 1.单例设计模式
    单例模式的五种实现方式1、饿汉式(线程安全,调用效率高,但是不能延时加载publicclassImageLoader{privatestaticImageLoaderinstance=newImageLoader;privateImageLoader(){}publicstaticImageLoadergetInstance(){returninstanc......
  • 设计模式-观察者模式
    定义观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。UML结构图如下:其中,Subject类是主题,它把所有对观察者对象的引用文件存在了一个聚集里,每个主题都可以有任何数量的观......
  • 状态模式
    状态模式1.按照一个营销活动的审核状态进行流转活动编辑,审核,撤销审核,通过,拒绝,关闭,开启,活动中模拟活动的状态的流转2.上代码-基础定义status.java活动中每个状态的定义publicenumStatus{//1创建编辑、2待审核、3审核通过(任务扫描成活动中)、4审核拒绝(可以撤审到......
  • 软件设计模式学习每日总结-第四天
    第四天建造者模式:将一个复杂对象的构建和他的表 建造者模式服务于多个成员的产品,无需用户关注建造的细节。 ......
  • 枚举策略模式
    枚举策略模式将枚举和策略模式相结合,能使代码更加简洁。以下是消息推送相关的案例1、定义消息推送接口packagecom.bitzh.strategy;publicinterfaceMessagePushStrategy{voidpush(Stringcontent);}2、分别创建邮件推送、短信推送和企业微信推送三个类,实现消息......
  • Knative event Brokers and Triggers 事件传递模式实例
    BrokersandTriggers实例说明eventsource:gitlabsource基于MT通道的broker:defaulttriggertrigger-push->sinkevent-display-push过滤条件:dev.knative.sources.gitlab.pushtriggertrigger-tag-push->sinkevent-display-tag_push过滤条件:dev.knative.......
  • 非严格模式下,this有4种绑定机制(默认、隐式、显式、new)
    执行以下选项中的程序,输出结果是undefined的是()Avaro={age:18,a:{fn:function(){console.log(this.age);}}}o.a.fn();BclassAnimal{constructor(color){this.color=color;}getColor(){console.log("animal的颜色是"+this.color)......
  • 非严格模式下color被泄漏到全局作用域中,创建一个全局变量;严格模式下抛出ReferenceErro
    请问在非严格模式下以下JS代码最终的输出是什么?functionchange(obj){with(obj){color='red'}}varbox={size:'15*15'}change(box);console.log(color);AundefinedBnullCredD报错正确答案:C需要明确with会创建一个新的作用域,由于box本身没有......
  • 「软件设计」权威领域驱动设计(DDD)简介
    「软件设计」权威领域驱动设计(DDD)简介今天的企业应用程序无疑是复杂的,并依赖一些专门技术(持久性,AJAX,Web服务等)来完成它们的工作。作为开发人员,我们倾向于关注这些技术细节是可以理解的。但事实是,一个不能解决业务需求的系统对任何人都没有用,无论它看起来多么漂亮或者如何很好地构......
  • 终于有人把VMware虚拟机三种网络模式讲清楚了!
    前段时间VMware更新了,你用上最新版了吗?有几个网工在操作中遇到过各种各样的问题。比如说由于公司服务器重启导致出现下面的问题:在Xshell里连接虚拟机映射时连接失败;能够连接上虚拟机的映射地址,但gitpull时报错无法解析hostname……其实这些都是ip问题导致的,但主要还是虚拟机的网络......