2013-08-22 167 views
0

我已經實現工廠方法如下:工廠方法implementaion

class A 
{ 

} 
class A1:A 
{ 

} 

class A2:A 
{ 

} 
static class Factory 
{ 
    public static A GetInstance(int i) 
    { 
     if (i == 1) 
      return new A1(); 
     else if (i == 2) 
      return new A2(); 
     else 
      return null; 

    } 
} 

我想使用的工廠在下面的類方法F1()。該方法F1()將從其衍生classes.I被稱爲可以通過下面的方法去:

方法1:

class MyClass 
{ 
    private A obj = null; 
    public void f1() 
    { 
     obj = Factory.GetInstance(1); 
    } 

} 

方法2:

class MyClass2 
{ 
    protected A obj { get; set; } 
    protected void f1() 
    { 
     obj = Factory.GetInstance(1); 
    } 

} 

哪種方法更好?我是否需要保護屬性和方法? 這些方法的優缺點是什麼?

回答

0

方法1

通常但並非總是想要繼承方法而不是數據。 f1()函數將使用工廠構造obj,因此不需要設置方法。 f1()可以保持被保護,每個派生類可以調用f1()來獲取它們自己的對象實例,但是如果你需要與其他人共享這個特定的實例,你只需在MyClass中創建一個getObj公共方法,該方法可以返回一個常量在C++中引用或者在java中使用這種類型的final或者C++中的拷貝或者Java中的clone(不知道c#是否完全一樣),但是MyClass中仍然有你的私有obj實例。

+0

哇!文本牆。你可能會分解一點點嗎? –