模式定義
模板方法模式(Template Method Pattern)是一種行為型設計模式,它通過定義算法的骨架(固定步驟),允許子類在不改變算法結構的情況下重寫特定步驟。該模式的核心是將通用流程封裝在基類中,通過繼承實現擴展。
模式結構
抽象基類(AbstractClass)
- 定義模板方法
execute()
,包含固定執行流程(如初始化→加工→收尾) - 聲明純虛函數(如
performMachining()
)用于子類實現可變步驟
具體子類(ConcreteClass) - 實現基類中的抽象方法,定義具體加工邏輯(如鉆孔、銑削)
客戶端(Client) - 通過基類指針/引用調用模板方法,實現多態執行
適用場景
流程標準化:數控系統中不同加工類型共享相同執行流程(如預熱→加工→冷卻)
代碼復用:避免重復編寫通用步驟代碼(如設備初始化)
擴展性需求:新增加工類型只需繼承基類并實現特定步驟
C++示例(數控系統場景)
場景說明:
數控系統需要統一管理不同加工類型(鉆孔/銑削)的執行流程,確保所有加工任務都遵循初始化→加工→清理的標準步驟。
#include // 抽象基類:加工流程模板
class MachiningProcess {
public:// 模板方法(固定流程)void execute() {initialize();performMachining();finalize();}protected:// 通用步驟(基類實現)void initialize() { std::cout << "設備初始化完成" << std::endl; }void finalize() { std::cout << "清理加工環境" << std::endl << std::endl; }// 可變步驟(子類實現)virtual void performMachining() = 0;
};// 具體子類:鉆孔流程
class DrillingProcess : public MachiningProcess {
protected:void performMachining() override {std::cout << "執行鉆孔:轉速2500rpm,深度10mm" << std::endl;}
};// 具體子類:銑削流程
class MillingProcess : public MachiningProcess {
protected:void performMachining() override {std::cout << "執行銑削:進給速度500mm/min,切削寬度5mm" << std::endl;}
};int main() {MachiningProcess* process1 = new DrillingProcess();process1->execute(); // 輸出鉆孔流程MachiningProcess* process2 = new MillingProcess();process2->execute(); // 輸出銑削流程delete process1;delete process2;return 0;
}
輸出結果
設備初始化完成
執行鉆孔:轉速2500rpm,深度10mm
清理加工環境 設備初始化完成
執行銑削:進給速度500mm/min,切削寬度5mm
清理加工環境
實現要點
模板方法封裝流程:execute()
方法定義了不可變的執行順序
鉤子方法隔離變化:performMachining()
由子類實現具體加工邏輯
開閉原則:新增加工類型只需繼承基類,無需修改現有代碼
通過該模式,數控系統可以統一管理各類加工任務的執行流程,同時支持靈活擴展新的加工類型。