gpt4 book ai didi

c# - 抽象工厂模式而不是泛型——怎么样?

转载 作者:行者123 更新时间:2023-11-30 14:47:13 24 4
gpt4 key购买 nike

我有一个通用接口(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() 方法必须返回 ResultDetailedResultReader.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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com