假设我有一系列数学算法都应该遵循相同的结构,所以我希望这些类中的每一个都实现一个通用的接口类。但是编译器说静态类是不可能的。
那我应该怎么做:
答案 0 :(得分:1)
我建议您使用接口或抽象基类以及工厂,它将根据某些输入返回正确的算法实现。通过使这些类实现接口,您还将在这些方法的使用者和算法之间带来较弱的耦合,并且您还将受益于单独测试应用程序的不同部分进行单元测试的可能性。
更新:
以下是使用界面的示例:
public interface IMathAlgorithm
{
double Add(double a, double b);
}
public class FooAlgorithm : IMathAlgorithm
{
public double Add(double a, double b)
{
return StaticFoo.Add(a, b);
}
}
public class BarAlgorithm : IMathAlgorithm
{
public double Add(double a, double b)
{
return StaticBar.Add(a, b);
}
}
现在,消费者将始终使用IMathAlgorithm
界面,因为他们所关心的只是添加两个数字而不是实现此添加的方式。工厂模式可以简化特定算法的特定实现的创建,但DI frameworks可以很好地完成这项工作。
现在,如果你有一些丑陋的遗留代码,你无法控制,哪些依赖于静态类/方法,你可以在给定算法的特定实现中调用它。优点是它现在隐藏在特定实现之后,算法的消费者不必明确地调用/依赖它。
答案 1 :(得分:1)
让你的课程非静态并实现你的界面。工厂是在工厂内部封装你的具体类,只提供外部接口的实例,这适用于你的情况,但不是强制性的。