[英]factory method pattern in C#
class A
工具IC
class B
實現IC
class Factory
有一個方法GetObject(int x)
; x=0
為A
, x=1
為B
。
如何強制使用Factory.GetObject
方法創建類型為A
和B
對象,並防止諸如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.