我有一组由静态类组成的逻辑组,如:
static class A {
static int mutate(int i) { /**implementation*/ };
static double prop(double a, double b) { /**implementation*/ };
}
static class B {
static int mutate(int i) { /**implementation*/ };
static double prop(double a, double b) { /**implementation*/ };
}在这种情况下,A和B是通过一组函数(例如变体)实现相同行为的静态类。我想为这个模式使用类似于接口的东西,但是由于静态类不能实现接口,我不知道该做什么。清洁地实现这类行为的最佳方法是什么?
编辑:
以下是我目前所做工作的一个例子。这些类没有状态,所以通常我会使它们是静态的。
Interface IMutator {
int mutate(int i);
}
class A : IMutator {
int mutate(int i) { /**implementation*/ };
}
class B : IMutator {
int mutate(int i) { /**implementation*/ };
}
class C {
public List<IMutator> Mutators;
public C(List<IMutator> mutators) {
Mutators = mutators;
}
}
//Somewhere else...
//The new keyword for A and B is what really bothers me in this case.
var Cinstance = new C(new List<IMutator>() {new A(), new B() /**...*/});发布于 2016-06-29 05:06:35
无状态类不必是静态的。此外,当您想要编写单元测试时,或者当您想要提取一些公共接口时,静态依赖关系并不是一个好的选择(在您的情况下)。
有只包含逻辑的非静态类是可以的。例如,人们使用无状态控制器构建ASP .NET应用程序。
因此,只需丢弃static并提取一个接口即可。
发布于 2016-06-29 05:25:50
除了@Dennis (我已经做了+1'ed,这确实是可行的方法)之外,其他可能有效的方法是拥有一组函数(Func<>)和/或操作(Action<>),并使用反射来解析它们。该代码将不是特别优雅或表现,但它的工作。
我做了一个简单的例子论圆珠笔
https://stackoverflow.com/questions/38090624
复制相似问题