我有一个通用接口:
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();
}
}