设计问题 - 通用基类和不同的返回类型

时间:2009-10-22 08:03:38

标签: design-patterns

我有什么? 我有一个抽象类QueryExecutor和许多继承自它的类,我刚刚给了它们两个。构造结果对象的逻辑是相同的,但每个继承的类返回一个不同的集合 - 其中一些集合在System.Web.UI.WebControls命名空间中,一些是自定义集合类。

abstract class QueryExecutor
{
    abstract object Execute();

    //Common methods for construction of query
}

class SqlQueryExecutor : QueryExecutor
{
    public object Execute()
    {
        ProfileNodeCollection nodes = new ProfileNodeCollection();
        //Construct nodes
        return nodes;
    }
}

class CamlQueryExecutor : QueryExecutor
{
    public object Execute()
    {
        TreeNodeCollection nodes = new TreeNodeCollection();
        //Construct nodes
        return nodes;
    }
}

我想要什么?

我想过有一个工厂来实例化适当的子类并返回结果。在上面的设计中,我需要转换来自QueryExecutor.Execute()方法的结果。我不想这样做。

我面临什么问题?

由于子类中的返回类型不同(有些在System.Web.dll中),上述设计是否适用于此问题?

我还有其他方法吗?

1 个答案:

答案 0 :(得分:2)

为什么不使用泛型来做这件事?

abstract class QueryExecutor<T>
    {
        public abstract T Execute();

        //Common methods for construction of query 
    }