2013-08-22 3 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)에 공장을 사용하려면(). 다음과 같은 방법으로 갈 수있는 파생 classes.I에서()를 호출되는 메소드 F1 :

접근 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() 함수는 factory를 사용하여 obj를 구성 할 것이므로 set 메소드가 필요하지 않습니다. f1()은 보호 된 상태로 유지 될 수 있으며 각 파생 클래스는 객체의 인스턴스를 가져 오기 위해 f1()을 호출 할 수 있지만이 특정 인스턴스를 다른 인스턴스와 공유해야하는 경우에는 const를 반환 할 수있는 MyClass 내부 getObj 공용 메소드를 만들면됩니다. C++ 또는이 형식의 java 또는 C++의 복사본 또는 Java의 복제본 (C#이 정확히 동일한 지 확실하지 않음)에도 MyClass의 개인 인스턴스가 있습니다.

+0

와아! 텍스트 벽입니다. 조금이라도 부셔 주시겠습니까? –