定義算法骨架,將部分步驟延遲到子類,使子類不改變算法結構即可重定義特定步驟。
支付網關整合:提交介面與網關回調介面。各網關參數格式不同(如金額參數 money vs amount),但提交流程固定:
生成表單與記錄日誌因網關而異,流程其餘相同。引入 Template Method 復用不變部分,變化留給子類。
using System;
using System.Collections.Generic;
using System.Text;
namespace TemplateMethodExample
{
class Program
{
static void Main(string[] args)
{
PayGateway pg = new IPSGateway();
pg.SubmitOrder(new Order());
}
}
class Order { }
class SubmitForm { }
abstract class PayGateway
{
protected abstract void WriteLog(SubmitForm sf);
protected abstract SubmitForm GenerateOrderForm(Order order);
public void SubmitOrder(Order order)
{
if (order == null) { Console.WriteLine("Invalid Order"); return; }
SubmitForm sf = GenerateOrderForm(order);
if (sf == null) { Console.WriteLine("Generate Submit Form Failed"); return; }
WriteLog(sf);
}
}
class IPSGateway : PayGateway
{
protected override void WriteLog(SubmitForm sf) => Console.WriteLine("Log Wrote");
protected override SubmitForm GenerateOrderForm(Order order)
{
Console.WriteLine("Submit Form Generated");
return new SubmitForm();
}
}
}
SubmitOrder 為模板方法,封裝固定流程;WriteLog、GenerateOrderForm 為抽象步驟,延遲至子類實現。