我有一个通用接口:

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();
    }
}

07-24 20:16