我有一个通用接口(interface):
public interface IReader<T> where T: Result
{
IEnumerable<T> ReadResults();
}
其中 Result
是一个基类,被扩展为 DetailedResult
:
public class Result
{
// ...
}
public class DetailedResult : Result
{
// ... ...
}
现在我有两个具体类型的 IReader
,每个实现返回不同的类型,特定于阅读器类型:
public class DefaultResultReader<Result> : IReader<Result>
{
IEnumerable<Result> ReadResults();
}
和
public class DetailedResultReader<DetailedResult> : IReader<DetailedResult>
{
IEnumerable<DetailedResult> ReadResults();
}
上面给出的结构使用了泛型。如果可能的话,我想摆脱它,并有某种工厂可以为我创建 IReader
的具体实现 - DefaultResultReader.ReadResults()
方法必须返回 Result
而 DetailedResultReader.ReadResults()
必须返回 DetailedResult
我的问题是抽象工厂应该如何寻找这个结构 - 如何设计它以便我可以根据要求创建特定的 IReader
对象?
最佳答案
我没有得到你想要的,但我猜你期待以下内容:
public interface IReader<T> where T : Result
{
IEnumerable<T> ReadResults();
}
public class Result
{
}
public class DetailedResult : Result
{
// ... ...
}
public class DefaultResultReader : IReader<Result>
{
public IEnumerable<Result> ReadResults()
{
return null;
}
}
public class DetailedResultReader : IReader<DetailedResult>
{
public IEnumerable<DetailedResult> ReadResults()
{
return null;
}
}
public abstract class ResultReaderAbsractFactory
{
public abstract IReader<Result> CreareDefaultResultReader();
public abstract IReader<DetailedResult> CreareDetailedResultReader();
}
public class ConcreteResultRaderFactory : ResultReaderAbsractFactory
{
public override IReader<Result> CreareDefaultResultReader()
{
return new DefaultResultReader();
}
public override IReader<DetailedResult> CreareDetailedResultReader()
{
return new DetailedResultReader();
}
}
关于c# - 抽象工厂模式而不是泛型——怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46234686/