解决的问题
开发一个银行软件,有付款、转账等任务,要求在执行任务前,需要先记录日志。
代码
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等)。
网友评论