策略与模板方法模式对比 — 软件工程选择题
题目
某任务执行器原设计为抽象类 Task,其 run() 依次调用 init()、work()、finish(),其中 work() 为抽象方法,由子类实现;现有两个子类仅 work() 不同。现需新增一种变体,其执行顺序为 init()、finish()、work(),且各步骤的具体实现均与原有子类不同。下列判断正确的是:
A. 该新增变体只需新增 Task 子类并重写 run(),这仍严格符合模板方法模式对算法骨架不可变的要求
B. 模板方法模式与策略模式都通过继承来改变算法,因此二者都可自然支持步骤顺序变化
C. 若将两种执行顺序分别封装为不同策略对象的 execute(),由上下文委托执行,则无需依赖父类固定骨架即可支持该变体
D. 策略模式要求所有具体策略具有相同的步骤数量和顺序,因此无法支持该新增变体