簡體   English   中英

C#中的工廠方法模式

[英]factory method pattern in C#

class A工具IC
class B實現IC

class Factory有一個方法GetObject(int x) x=0Ax=1B

如何強制使用Factory.GetObject方法創建類型為AB對象,並防止諸如new A()之類A東西應為Factory.GetObject(0)

如何強制使用Factory GetObject方法創建類型為A和B的對象並防止出現類似new A()的問題

您不能強制使用Factory.GetObject ,這是在將A和B構造函數標記為內部之后,應該在提供的API文檔中編寫的內容。

public class A: IC
{
    internal A() { }
}

public class B: IC
{
    internal B() { }
}

public static class Factory
{
    public static IC GetObject(int x)
    {
        if (x == 0)
        {
            return new A();
        }

        if (x == 1)
        {
            return new B();
        }

        throw new ArgumentException("x must be 1 or 2", "x");
    }
}

這樣,將無法從其他程序集中訪問這些構造函數。 也不要忘記反射,無論您嘗試隱藏它們的程度如何,都可以直接實例化這些類。

我不確定它是否仍然有用(已經一年了……),但是這是您可以進一步實施工廠用法的方法:

public class A
{
   internal protected A() {}
}

public class AFactory
{
   public A CreateA()
   {
      return new InternalA();
   }

   private class InternalA : A
   {
      public InternalA(): base() {}
   }
}

使用類A的組件無法直接創建它(只要它們不繼承它...)。

暫無
暫無

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

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