You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让基类强制执行代码,同时要求子类实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:55:13