簡體   English   中英

具有泛型的C#工廠模式

[英]C# factory pattern with generics

我想為myInterface做一個工廠類,但是我不能為具體的類調用構造函數,因為工廠類必須使用特定的參數T

有沒有辦法為通用接口創建工廠類?

簡化示例

interface myInterface<T>
{
    void work(T input);
    T getSomething();
}

class A : myInterface<int>
{
    //implementation
}

class B : myInterface<someClass>
{
   //implementation
}

interface Factory<R,T>
{
     R Create(T type);
}
class myFactory<T> : Factory<myInterface<T>, string>
{
     myInterface<T> Create(string type) {
          if(type == "A")
               //return new A object
          if(type == "B")
               //return new B object
          //some default behavior
     }
}

默認情況下,工廠模式是通用的,因為這種模式的整個目的是根據提供給方法的值返回不同類型的對象。

除了初始化所需類型的對象所需的內容外,工廠內應該沒有太多的代碼。

在您提供的代碼中,您期望返回一個myInterface類型的對象,但是這是不可能的,因為您必須指定不同的返回類型,這將由type參數的值來選擇。 您已經失去了工廠模式的全部要點,因為您已經聲明了特定類型的工廠-這意味着您將僅創建該類型的對象(概念丟失)。

我要做的是創建另一個類,該類將同時用作類A和B的層(這兩個類都必須從中繼承)。 然后,我將工廠的返回類型聲明為該類的類型。

請記住,每個類都實現相同的通用接口,但類型不同。

這是一個簡單的示例:

    interface myInterface<T>
    {

    }
    class LayerClass
    {

    }
    class A : LayerClass, myInterface<int>
    {
        //implementation
    }

    class B : LayerClass, myInterface<object>
    {
       //implementation
    }

    public static void Main(string[] args)
    {

    }
    class myFactory<T>
    {
        LayerClass Create(string type) 
        {
            if(type == "A")
                return (LayerClass)new A();
            if(type == "B")
                return (LayerClass)new B();
            return null;
         }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM