设计模式——职责模式

设计模式——职责模式

职责模式编程要求:为了促进大学教学质量的提升,学校加大了教学经费的投入,各归口职能部门,如教务处、校团委等都通过二次分配划拨了相应经费到学院支持教学改革、学生创新创业等。为了规范财务报销,财务处颁布了相关财务报销制度,其中规定如下表。

5万元以下单位(学院)负责人审批
5-10万元以下归口职能部门负责人审批
10-30万元以下分管校领导审批
30万元以上主管财务校领导审批

在报销的时候,我们需要找到对应的负责人进行审批,那么才能进行报销,那么不同的金额要找不同的人就显得十分繁琐,那么有没有办法只上交给一个人,然后层层递交给最后的领导审批呢?职责模式可以实现

在这里插入图片描述

python

首先需要创建一个Applicant申请者类,用于申请人填写自己的姓名以及要报销的金额,再Applicant类中有request方法主要是用于向第一层的审批人提交信息,因为我们需要的效果是 单位(学院)负责人->归口职能部门负责人审批->分管校领导->主管财务校领导 在这四个领导中做条件匹配,如果金额过大就交给下一层的领导去处理,最后处理完毕。

from abc import ABCMeta, abstractmethod

#申请人
class Applicant():
    def __init__(self,name,expenses):
        self.name = name
        self.expenses = expenses

    def request(self,academyLeader):
        print(self.name+"向"+academyLeader.getName()+"("+academyLeader.getTitle()+")提交申请,金额为:"+str(self.expenses))
        academyLeader.expensesJudge(self)

    def getExpenses(self):
        return self.expenses

    def getName(self):
        return self.name

编写Manager接口,让负责人类继承Manager接口,增加代码的可拓展性,然后以此创建四个负责人类 单位(学院)负责人->归口职能部门负责人审批->分管校领导->主管财务校领导 主要方法有negativeNum对金额是否为0的判断 expensesJudge判断 金额是否资金符合规矩,如不足,触发nextManager方法转交下一层

#审批负责人接口
class Manager(metaclass=ABCMeta):

    def __init__(self,name ,title ):
        self.name = name
        self.title = title
        self.nextOne = None


    #金额不符合
    def negativeNum(self,num):
        if int(num) <= 0 :
            return 1
        return 0

    #费用判断
    @abstractmethod
    def expensesJudge(self,applicant):
        pass

    #判断金额是否资金符合规矩,如不足,转交下一层
    @abstractmethod
    def nextManager(self,applicant):
        pass

    @abstractmethod
    def setNextOne(self,manager):
        pass


class AcademyLeader(Manager):

    def __init__(self,name ,title):
        super().__init__(name ,title)

    def expensesJudge(self,applicant):
        # 金额大小
        Expenses = applicant.getExpenses()
        # 申请人名称
        Name = applicant.getName()

        boolean = self.negativeNum(Expenses)
        if(boolean == 1):
            print("金额不能为负或者零")
            return

        if Expenses < 50000 and Expenses > 0:
            print(Name+"申请金额为:"+str(Expenses)+",经审核,申请通过--经办人:"+self.name+"("+self.title+")")
            return
        else:
            if self.nextOne is not None:
                self.nextManager(applicant)

    def nextManager(self,applicant):
        self.nextOne.expensesJudge(applicant)

    def setNextOne(self,manager):
        self.nextOne = manager

    def getName(self):
        return self.name

    def getTitle(self):
        return self.title


class FunctionalDepartmentLeader(Manager):

    def __init__(self,name ,title):
        super().__init__(name ,title)

    def expensesJudge(self,applicant):
        # 金额大小
        Expenses = applicant.getExpenses()
        # 申请人名称
        Name = applicant.getName()

        boolean = self.negativeNum(Expenses)
        if(boolean == 1):
            print("金额不能为负或者零")
            return

        if Expenses < 100000 and Expenses >= 50000:
            print(Name+"申请金额为:"+str(Expenses)+",经审核,申请通过--经办人:"+self.name+"("+self.title+")")
            return
        else:
            if applicant is not None:
                self.nextManager(applicant)

    def nextManager(self,applicant):
        self.nextOne.expensesJudge(applicant)

    def setNextOne(self,manager):
        self.nextOne = manager

    def getName(self):
        return self.name

    def getTitle(self):
        return self.title

class SchoolLeaderInCharge(Manager):

    def __init__(self,name ,title):
        super().__init__(name ,title)

    def expensesJudge(self,applicant):
        # 金额大小
        Expenses = applicant.getExpenses()
        # 申请人名称
        Name = applicant.getName()

        boolean = self.negativeNum(Expenses)
        if(boolean == 1):
            print("金额不能为负或者零")
            return

        if Expenses < 300000 and Expenses >= 100000:
            print(Name+"申请金额为:"+str(Expenses)+",经审核,申请通过--经办人:"+self.name+"("+self.title+")")
            return
        else:
            if applicant is not None:
                self.nextManager(applicant)

    def nextManager(self,applicant):
        self.nextOne.expensesJudge(applicant)

    def setNextOne(self,manager):
        self.nextOne = manager

    def getName(self):
        return self.name

    def getTitle(self):
        return self.title


class LeaderInChargeOfFinance(Manager):

    def __init__(self,name ,title):
        super().__init__(name ,title)

    def expensesJudge(self,applicant):
        # 金额大小
        Expenses = applicant.getExpenses()
        # 申请人名称
        Name = applicant.getName()

        boolean = self.negativeNum(Expenses)
        if(boolean == 1):
            print("金额不能为负或者零")
            return

        if Expenses >= 300000:
            print(Name+"申请金额为:"+str(Expenses)+",经审核,申请通过--经办人:"+self.name+"("+self.title+")")
            return
        else:
            if applicant is not None:
                self.nextManager(applicant)

    def nextManager(self,applicant):
        self.nextOne.expensesJudge(applicant)

    def setNextOne(self,manager):
        self.nextOne = manager

    def getName(self):
        return self.name

    def getTitle(self):
        return self.title

最后对代码进行测试

if __name__ == '__main__':
    #设置各部门信息
    academyLeader = AcademyLeader("小红", "单位(学院)负责人")
    functionalDepartmentLeader = FunctionalDepartmentLeader("小黄", "归口职能部门负责人")
    schoolLeaderInCharge = SchoolLeaderInCharge("小绿", "分管校领导")
    leaderInChargeOfFinance = LeaderInChargeOfFinance("小青", "主管财务校领导")

    #为各部本指定下一级
    academyLeader.setNextOne(functionalDepartmentLeader)
    functionalDepartmentLeader.setNextOne(schoolLeaderInCharge)
    schoolLeaderInCharge.setNextOne(leaderInChargeOfFinance)

    #模拟申请者
    applicant = Applicant("小源",5000)
    applicant1 = Applicant("小橙",150000)

    applicant.request(academyLeader)
    applicant1.request(academyLeader)

    //结果
    #小源向小红(单位(学院)负责人)提交申请,金额为:5000
	#小源申请金额为:5000,经审核,申请通过--经办人:小红(单位(学院)负责人)
	#小橙向小红(单位(学院)负责人)提交申请,金额为:150000
	#小橙申请金额为:150000,经审核,申请通过--经办人:小绿(分管校领导)

java

与python实现思想一致,不多做赘诉

Applicant

//申请人
public class Applicant {
    public Applicant(String name, Integer expenses) {
        this.name = name;
        this.expenses = expenses;

    }

    //报销人
    private String name ;

    //报销费用
    private Integer expenses;


    public void request(AcademyLeader academyLeader){
        System.out.println(this.name+"向"+academyLeader.getName()+"("+academyLeader.getTitle()+")提交申请,金额为:"+this.expenses);
        academyLeader.expensesJudge(this);
    }



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getExpenses() {
        return expenses;
    }

    public void setExpenses(Integer expenses) {
        this.expenses = expenses;
    }
}

Manager

//审批负责人接口
public interface Manager {

    //金额不符合
    boolean negativeNum(Integer num);

    //费用判断
    void expensesJudge(Applicant applicant);

    //判断金额是否资金符合规矩,如不足,转交下一层
    void nextManager(Applicant Applicant);

}

AcademyLeader

public class AcademyLeader implements Manager {

    private String name;

    private String title;

    private Manager nextOne;

    public AcademyLeader(String name, String title) {
        this.name = name;
        this.title = title;
    }


    @Override
    public boolean negativeNum(Integer num) {
        if(num < 0)
        return true;
        return false;
    }

    @Override
    public void expensesJudge(Applicant applicant) {
        if(negativeNum(applicant.getExpenses())){
            System.out.println("金额不能为负");
        }
        if(applicant.getExpenses() < 50000 && applicant.getExpenses() > 0){
            System.out.println(applicant.getName()+"申请金额为:"+applicant.getExpenses()+",经审核,申请通过--经办人:"+this.name+"("+this.title+")");
            return;
        }else {
            nextManager(applicant);
        }

    }

    @Override
    public void nextManager(Applicant applicant) {
        this.nextOne.expensesJudge(applicant);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Manager getNextOne() {
        return nextOne;
    }

    public void setNextOne(Manager nextOne) {
        this.nextOne = nextOne;
    }
}

FunctionalDepartmentLeader

public class FunctionalDepartmentLeader implements Manager {
    private String name;

    private String title;

    private Manager nextOne;

    public FunctionalDepartmentLeader(String name, String title) {
        this.name = name;
        this.title = title;
    }


    @Override
    public boolean negativeNum(Integer num) {
        if(num < 0)
            return true;
        return false;
    }

    @Override
    public void expensesJudge(Applicant applicant) {
        if(negativeNum(applicant.getExpenses())){
            System.out.println("金额不能为负");
        }
        if(applicant.getExpenses() < 100000 && applicant.getExpenses() >= 50000){
            System.out.println(applicant.getName()+"申请金额为:"+applicant.getExpenses()+",经审核,申请通过--经办人:"+this.name+"("+this.title+")");
            return;
        }else {
            nextManager(applicant);
        }

    }

    @Override
    public void nextManager(Applicant applicant) {
        this.nextOne.expensesJudge(applicant);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Manager getNextOne() {
        return nextOne;
    }

    public void setNextOne(Manager nextOne) {
        this.nextOne = nextOne;
    }

SchoolLeaderInCharge

public class SchoolLeaderInCharge implements Manager {
    private String name;

    private String title;

    private Manager nextOne;

    public SchoolLeaderInCharge(String name, String title) {
        this.name = name;
        this.title = title;
    }


    @Override
    public boolean negativeNum(Integer num) {
        if(num < 0)
            return true;
        return false;
    }

    @Override
    public void expensesJudge(Applicant applicant) {
        if(negativeNum(applicant.getExpenses())){
            System.out.println("金额不能为负");
        }
        if(applicant.getExpenses() < 300000 && applicant.getExpenses() >= 100000){
            System.out.println(applicant.getName()+"申请金额为:"+applicant.getExpenses()+",经审核,申请通过--经办人:"+this.name+"("+this.title+")");
            return;
        }else {
            nextManager(applicant);
        }

    }

    @Override
    public void nextManager(Applicant applicant) {
        this.nextOne.expensesJudge(applicant);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Manager getNextOne() {
        return nextOne;
    }

    public void setNextOne(Manager nextOne) {
        this.nextOne = nextOne;
    }
}

LeaderInChargeOfFinance

public class LeaderInChargeOfFinance implements Manager {
    private String name;

    private String title;

    private Manager nextOne;

    public LeaderInChargeOfFinance(String name, String title) {
        this.name = name;
        this.title = title;
    }


    @Override
    public boolean negativeNum(Integer num) {
        if(num < 0)
            return true;
        return false;
    }

    @Override
    public void expensesJudge(Applicant applicant) {
        if(negativeNum(applicant.getExpenses())){
            System.out.println("金额不能为负");
        }
        if(applicant.getExpenses() >= 300000){
            System.out.println(applicant.getName()+"申请金额为:"+applicant.getExpenses()+",经审核,申请通过--经办人:"+this.name+"("+this.title+")");
            return;
        }else {
            nextManager(applicant);
        }

    }

    @Override
    public void nextManager(Applicant applicant) {
        this.nextOne.expensesJudge(applicant);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Manager getNextOne() {
        return nextOne;
    }

    public void setNextOne(Manager nextOne) {
        this.nextOne = nextOne;
    }
}

代码测试

public class DutyTest {
    public static void main(String[] args) {

        AcademyLeader academyLeader = new AcademyLeader("小红", "单位(学院)负责人");
        FunctionalDepartmentLeader functionalDepartmentLeader = new FunctionalDepartmentLeader("小黄", "归口职能部门负责人");
        SchoolLeaderInCharge schoolLeaderInCharge = new SchoolLeaderInCharge("小绿", "分管校领导");
        LeaderInChargeOfFinance leaderInChargeOfFinance = new LeaderInChargeOfFinance("小青", "主管财务校领导");

        academyLeader.setNextOne(functionalDepartmentLeader);
        functionalDepartmentLeader.setNextOne(schoolLeaderInCharge);
        schoolLeaderInCharge.setNextOne(leaderInChargeOfFinance);


        Applicant applicant = new Applicant("小源",5000);

        Applicant applicant1 = new Applicant("小橙",150000);

        applicant.request(academyLeader);
        applicant1.request(academyLeader);


    }
}
//结果
/*小源向小红(单位(学院)负责人)提交申请,金额为:5000
小源申请金额为:5000,经审核,申请通过--经办人:小红(单位(学院)负责人)
小橙向小红(单位(学院)负责人)提交申请,金额为:150000
小橙申请金额为:150000,经审核,申请通过--经办人:小绿(分管校领导)*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值