Template Pattern

2024-06-10  本文已影响0人  杨志聪

解决的问题

开发一个银行软件,有付款、转账等任务,要求在执行任务前,需要先记录日志。

代码

Logger:

package com.cong.designpattern.template;

public class Logger {
    public void log() {
        System.out.println("log");
    }
}

Task:

package com.cong.designpattern.template;

public abstract class Task {
    private Logger logger;
    public Task() {
        this.logger = new Logger();
    }
    public void execute() {
        this.logger.log();
        this.doExecute();
    }
    protected abstract void doExecute();
}

PayTask:

package com.cong.designpattern.template;

public class PayTask extends Task{
    @Override
    protected void doExecute() {
        System.out.println("Do pay task");
    }
}

TransferTask:

package com.cong.designpattern.template;

public class TransferTask extends Task{
    @Override
    protected void doExecute() {
        System.out.println("Do transfer task");
    }
}

Test Code:

PayTask payTask = new PayTask();
payTask.execute();

TransferTask transferTask = new TransferTask();
transferTask.execute();

UML

Template Pattern UML

好处

Task是一个“模板”(template),他的的子类通过继承这个“模板”实现不同的任务,而且可以保证这些任务都有相同的执行逻辑(执行任务前,先执行logger等)。

上一篇下一篇

猜你喜欢

热点阅读