2016-08-22 2 views
-2

공장 방법 패턴과 관련하여 다음 질문을 이해할 수있는 사람이 있습니까?공장에서의 공장 방법 패턴 #

this 링크를 샘플로 참조하십시오.

1. 팩토리 메서드 패턴에서 추상 클래스 Factory의 필요성은 무엇입니까? 정상적인 수업을 사용한다면 무엇입니까 ?

2. 코드 변경이 클라이언트에 영향을 미치지 않는다고 명시되어 있습니다. 그러나 새로운 클래스 product3이 추가 된 경우 적절한 클라이언트 코드에 변경 사항이 필요합니다 (아래 코드 참조). 그렇다면이 디자인 패턴의 장점은 무엇입니까?

들리는군요 딜런

concreteFactoryforProduct1 factory = new concreteFactoryforProduct1(); 우리는 심플한 디자인 패턴에 개방 - 폐쇄 원칙을 구현하지 못할 4.Why

Factory[] objFactories = new Factory[2]; 
    objFactories[0] = new concreteFactoryforProduct1(); 
    objFactories[1] = new concreteFactoryforProduct2(); 
    foreach (Factory objFactory in objFactories) 

    { 
      Product objProduct = objFactory.GetProduct(); 
      objProduct.GetDetails(); 
     } 

이상 objFactories[0] = new concreteFactoryforProduct1();의 이익인가?

답변

1

(1) 추상 클래스의 가장 단순한 사용에 따라 abstract를 추가하면 새 Factory()를 사용하여 인스턴스를 만들지 않아도됩니다. (의미가 없으므로 동물과 코끼리와 동일 함 -> 동물은 추상 이라고만하며 동물이라고는 존재하지 않습니다.)

(2) 이것은 단지 데모입니다. 지구상에서 사용 가능한 공장을 나열하는 유스 케이스는 없을 것입니다.

(3)이 예에서는 팩토리 배열이므로 질문을 적용 할 수 없습니다.

(4) 공장 방법 패턴을 사용하지 않고 상황에 대해 질문하는 것 같습니다. 많은 경우가있을 수 있습니다. 당신이 그것을 구현하려고 하는지를 확인할 수 있습니다.

+1

1) 인스턴스를 만드는 중 objFactories [0] = new concreteFactoryforProduct1(); 2) 당신이 설명하려고하는 것을 분명히하지 마십시오. 3) objFactories [0]를 사용해야하는 이유는 무엇입니까? 왜 클래스 인스턴스를 사용할 수 없습니까? 이점은 무엇입니까? –

+0

(1) 예, 괜찮습니다. 새 Factory() -> 생성자를 호출하지 않습니다. 참조 유형 일뿐입니다. (2) 실제로 Factory1에서 만든 객체를 원한다면 인스턴스 (선호하는 Singleton)를 만들고 그 메소드를 호출하면됩니다. (3) 여기서, 두 배열의 콘크리트 팩토리를 같은 배열에 삽입하는 방법은 없습니까? –

+1

당신의 요점을 이해했습니다. 그러나 당신은 패턴 구현과이 방법을 사용하는 이점을 묻는 메신저를 설명하고 있습니다. 이 예제에서는 배열 만 사용합니다. 공장 추상 인스턴스에 직접 할당하는 많은 예제를 가질 수 있습니다. –