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

实现IKitchenObjectParent接口时如何避免代码重复?

解决方案:用组合模式复用接口实现

由于C#不支持多重继承,且你的场景里继承会带来不必要的耦合,组合是更合适的选择,具体实现步骤如下:

1. 抽离重复实现到独立类

把Implementation A的逻辑封装到一个单独的工具类里,若需要访问宿主对象的成员,可通过构造函数传入引用:

public class KitchenObjectParentImplA
{
    // 若需访问宿主的属性/方法,可保留宿主引用
    // private readonly IKitchenObjectParent _host;
    // public KitchenObjectParentImplA(IKitchenObjectParent host)
    // {
    //     _host = host;
    // }

    public void DoParentStuff()
    {
        // 这里放 IMPLEMENTATION A 的具体代码
    }
}

2. 在需要复用的类中通过组合调用实现

修改Player类:

public class Player: IKitchenObjectParent
{
    private readonly KitchenObjectParentImplA _impl = new KitchenObjectParentImplA();

    public void DoParentStuff()
    {
        _impl.DoParentStuff();
    }
}

修改CuttingCounter类:

public class CuttingCounter : BaseCounter, IKitchenObjectParent
{
    private readonly KitchenObjectParentImplA _impl = new KitchenObjectParentImplA();

    public void DoParentStuff()
    {
        _impl.DoParentStuff();
    }
}

3. 针对不同实现的扩展

对于DeliveryCounter的Implementation B,可以用同样的方式抽离,保持代码一致性:

public class KitchenObjectParentImplB
{
    public void DoParentStuff()
    {
        // 这里放 IMPLEMENTATION B 的具体代码
    }
}

public class DeliveryCounter : BaseCounter, IKitchenObjectParent
{
    private readonly KitchenObjectParentImplB _impl = new KitchenObjectParentImplB();

    public void DoParentStuff()
    {
        _impl.DoParentStuff();
    }
}

方案优势

  • 避免不必要的继承耦合:无需修改BaseCounter的继承关系,也不会强迫不需要实现接口的子类继承额外类。
  • 复用更灵活:同一个实现类可以被任意类组合使用,不受继承树限制。
  • 符合「组合优于继承」的面向对象原则,代码更易维护和扩展——后续修改Implementation A只需调整KitchenObjectParentImplA,所有复用它的类都会自动生效。

内容的提问来源于stack exchange,提问作者Rafael Santiago Altoé

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:02:13