首页 > 解决方案 > 根据亚型的几种行为

问题描述

假设我有一个界面

public interface IA
{
    double PerformCalculation();
}

和一个

public class C
{
    public IA ia {get; set;}
    public double DoCalculation()
    {
        return ia.SomeFunctionToImplement();
    }
}

子类型是指实现这个接口的类。背后的想法PerformCalculation是,它是一个函数,在实现它的子类型中执行密集的数值计算,遵循数值算法。我的问题是我有一些子类型,除了数值算法之外,还有一个允许跳过数值算法的公式,因此对于这些子类型,我可以选择:算法或公式。

有什么方法/“设计”可以让我跟踪这个选择?

标签: c#

解决方案


您可以class C使用 FormulaIA 增强您的能力:

public class C
{
    public IA NumericalIA { get; set; }
    public IA FormulaIA { get; set; }

    public double DoCalculation()
    {
        if (this.FormulaIA != null && ShouldUseFormula()) // ShouldUseFormula is your logic for deciding
        {
            return this.FormulaIA.PerformCalculation();
        }
        else
        {
            return this.NumericalIA.PerformCalculation();
        }
    }
}

然后,创建你的 C 类的人只能填充一个或两个实现,你的类可以决定使用哪一个。

这与让接口实现这两种方法没有太大区别,但它不会用不必要的方法使不支持公式方法的实现混乱。


推荐阅读