设计模式 ---- 模板方法
模板方法
模板方法可能和构建者模式有一点点相似,两者都可以将一个复杂的过程拆分成多个步骤
- Builder:最终目标通常是构建一个对象
- Template Method:最终目标是执行一个算法/流程
区别是,构建者模式关注的是“如何把一个复杂对象组装出来”,不同 Builder 可以按照自己的方式设置对象的各个部分;
而模板方法关注的是“一个算法必须按照什么流程执行”,父类规定流程骨架,子类负责实现具体步骤
比如将大象装进冰箱
第一步打开冰箱门,第二部将大象塞进冰箱,第三步,将冰箱门关上
这只是一个固定的顺序,具体的每一步骤,父类并不关心,这是继承实实现子类关心的问题,父类只负责什么样的顺序才能将大象装进冰箱
代码示例
class PutElephantIntoFridge
{
public:
void Execute()
{
OpenDoor();
PutElephant();
CloseDoor();
}
protected:
virtual void OpenDoor() = 0;
virtual void PutElephant() = 0;
virtual void CloseDoor() = 0;
};
这里的 Execute() 就是模板方法
它规定了整个算法的执行流程
OpenDoor()
↓
PutElephant()
↓
CloseDoor()
子类具体实现
class MyFridge : public PutElephantIntoFridge
{
protected:
void OpenDoor() override
{
// 具体怎么开门
}
void PutElephant() override
{
// 具体怎么把大象放进去
}
void CloseDoor() override
{
// 具体怎么关门
}
};
主业务代码中直接使用
MyFridge demoIns;
demoIns.Execute()
板方法的核心就是:父类规定“流程怎么走”,子类决定“每一步具体怎么做”
浙公网安备 33010602011771号