Android开发Android开发经验谈Android知识

Android设计模式之(14)----模板模式

2017-08-29  本文已影响49人  Ch3r1sh

模板模式

模板模式属于行为模式.

简单理解,某一套程序的流程是不改变的,但是具体的内容是可以更改的。

例如公司的财务报表,需要进行申请,然后经理签字以后才可以审批下来。

流程:下属财务资金审核提交---->经理审核---->经理签字---->审批完成
内容:有2个人去申请资金,他们执行的流程是一样的,但是具体申请的资金以及经理审批后给予的资金是作为内容可以改变的。

使用场景

代码示例

(一)资金审核流程接口

public interface Step {
    void stepOne();
    void stepTwo();
    void stepThree();
    void stepFinish();
}

审核需要4次流程,在第一步的流程中需要传入准备审核的金额。

(二)具体的审核流程

public class FundRequest implements Step {

    protected int auditAmount = 0;
    protected int actualAmount = 0;

    @Override
    public void stepOne() {
        System.out.print("\n" + "预备审核资金:" + String.valueOf(auditAmount));
    }

    @Override
    public void stepTwo() {
        System.out.print("\n" + "经理审核金额:" + String.valueOf(auditAmount));
    }

    @Override
    public void stepThree() {
        System.out.print("\n" + "经理审批金额:" + String.valueOf(actualAmount));
    }

    @Override
    public void stepFinish() {
        System.out.print("\n" + "审批允许的实际金额:" + String.valueOf(actualAmount));

    }


    //审核流程 不可更改
    public final void review() {
        if (auditAmount <= 0) {
            System.out.print("\n" + "请先调用StepOne添加预备审核资金");
            return;
        }
        System.out.println("\n" + "\n" + "------资金审核开始------");
        stepTwo();
        stepThree();
        stepFinish();
        System.out.println("\n" + "\n" + "------资金审核结束-------");
    }

}

在审查过程中,将实际可以修改的金额内容放在外部,具体流程按照1--->2--->3--->4执行下去.

(三)下属的具体资金审核请求

public class StaffOneRequest extends FundRequest {


    public StaffOneRequest(int auditAmount,int actualAmount) {
        this.auditAmount = auditAmount;
        this.actualAmount = actualAmount;
    }

    @Override
    public void stepOne() {
        super.stepOne();
    }

    @Override
    public void stepTwo() {
        super.stepTwo();
    }

    @Override
    public void stepThree() {
        super.stepThree();
    }

    @Override
    public void stepFinish() {
        super.stepFinish();
    }
}

在构造参数中对具体的内容金额进行输入输出.

调用方式

        //员工一号
        StaffOneRequest staffOneRequest=new StaffOneRequest(20,10);//审核金额20,通过金额10
        staffOneRequest.review();

        //员工二号
        StaffOneRequest staffOneRequest2=new StaffOneRequest(50,50);//审核金额50,通过金额50
        staffOneRequest2.review();

分别两个员工请求,通过构造参数的修改传值,在不改变实际流程的情况下完成对内容的更改.(有需求的也可以扩展方法进行修改,这里不做演示)

显示结果

------资金审核开始------

经理审核金额:20
经理审批金额:10
审批允许的实际金额:10

------资金审核结束-------


------资金审核开始------

经理审核金额:50
经理审批金额:50
审批允许的实际金额:50

------资金审核结束-------

总结

github地址

上一篇 下一篇

猜你喜欢

热点阅读