如何让基类强制执行代码,同时要求子类实现Run方法逻辑?
用模板方法模式解决基类固定流程+子类强制逻辑的问题
问题场景
你需要实现一个抽象基类Monitor,要求:
- 子类必须编写
Run方法的核心执行逻辑 - 基类要确保每次执行完成后自动记录最后运行时间
现有代码的矛盾点:抽象方法无法包含基类的固定逻辑(比如记录时间),普通方法又不能强制子类实现核心逻辑。
解决方案:模板方法模式
这是专门解决这类“基类定义流程框架,子类实现可变步骤”问题的设计模式,具体实现如下:
改进后的基类代码
public abstract class Monitor { // 对外暴露的模板方法,定义固定执行流程 public void Run() { // 第一步:执行子类的核心业务逻辑 Execute(); // 第二步:基类统一处理的收尾操作——记录最后运行时间 LastRun = DateTime.Now; } // 抽象方法:强制子类实现核心执行逻辑,不实现则无法实例化 protected abstract void Execute(); public DateTime LastRun { get; private set; } }
子类实现示例
public class DiskSpaceMonitor : Monitor { protected override void Execute() { // 子类自定义的核心逻辑:比如检查磁盘剩余空间 Console.WriteLine("扫描磁盘剩余空间..."); // 这里可以添加具体的检查逻辑 } }
方案优势
- 流程可控:基类的
Run()方法固定了执行顺序,子类无法修改,确保记录运行时间的逻辑不会被遗漏 - 强制实现:
Execute()是抽象方法,所有子类必须实现核心逻辑,避免遗漏业务代码 - 扩展性强:后续如果需要在基类添加统一逻辑(比如全局异常捕获、执行日志),直接修改
Run()方法即可,无需改动所有子类
内容的提问来源于stack exchange,提问作者Bastien Vandamme
相关产品推荐
相关产品推荐

