public abstract class AbstractMessageTemplate
{
protected string _userId;
public AbstractMessageTemplate(string userId) { _userId = userId; }
// 驗證用戶權限 - 基類實作,可被覆寫
public virtual bool ValidateUser()
{
return _userId == "admin";
}
// 延遲到子類實作的步驟
public abstract List Get();
// 模板方法:定義算法骨架
public List TemplateMethodGet()
{
if (ValidateUser())
return Get();
else
return new List { new MessageModel("無權獲取", DateTime.Now) };
}
}
ValidateUser() 為 virtual 非 abstract:提供預設實作 (admin 才有權),子類可選擇性覆寫Get() 為 abstract:強制子類實作具體數據獲取邏輯TemplateMethodGet() 為 非虛擬 (預設 sealed):**禁止子類覆寫算法骨架**,確保流程不被竄改這正是「模板方法」名稱由來:基類定義模板 (骨架),子類填充具體步驟。