解決的問題
開發(fā)一個銀行軟件,有付款、轉(zhuǎn)賬等任務(wù),要求在執(zhí)行任務(wù)前,需要先記錄日志。
代碼
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),他的的子類通過繼承這個“模板”實現(xiàn)不同的任務(wù),而且可以保證這些任務(wù)都有相同的執(zhí)行邏輯(執(zhí)行任務(wù)前,先執(zhí)行l(wèi)ogger等)。