2009-10-15 3 views
14

팩토리 클래스가 정적 인 일반적인 장소 및 정적 인 팩토리 메소드가 있습니다.공장 생성 방법 항상 정적입니까?

디자인 패턴 책의 GOF는 패턴의 엄격한 정의를 충족시키기 위해 공장 및 그 방법이 고정적이어야한다는 것을 규정 했습니까?

패턴의 결과로 +/메소드가 정적 인 팩토리가 있습니까? 상태 데이터는 일반적으로 팩토리 클래스에서 유지 관리하지 않으므로 일반적으로 정적입니다.

답변

11

패턴의 "엄격한 정의"와 같은 것이 없다고 생각합니다. 본질적으로 소프트웨어의 시간과 시간을 재조명하고 솔루션의 모습을 개괄하는 문제의 본질을 포착하는 패턴이 있습니다.

특히 공장 패턴을 사용하면 아니요, 공장 방법이 정적 일 필요는 없습니다. 패턴의 본질은 다른 클래스의 인스턴스를 생성하는 하나의 객체를 가졌다는 것입니다. 패턴을 설명하는 일반적인 방법은 클래스에 정적 메서드를 사용하는 것이지만 어떻게하는지는 당신에게 달려 있습니다. 그러나 우리 시스템에는 실제로 두 단계의 공장 메커니즘이 있습니다. 클래스에 정적 메소드를 사용하여 팩토리 객체를 생성합니다. 팩토리 객체는 구현 세트 중에서 선택하도록 구성 할 수 있으며 팩토리 객체를 사용하여 실제 작업을 수행해야하는 객체의 인스턴스를 스탬프 처리 할 수 ​​있습니다.

정적 메소드가없는 언어로 팩토리 패턴을 구현하는 것도 고려하십시오. 예를 들어 스칼라에서는 클래스 대신 객체를 사용합니다. 이것의 동작은 Java의 클래스에서 정적 메서드를 사용하는 것과 비슷하지만 구현의 특성은 매우 다릅니다.

+2

+1 패턴이 엄격하지 않고 패턴이 관대하지 않으며 패턴이 제어 할 수 없으므로 패턴을 기대하지 않는 것이 중요합니다. – djna

6

아니요, 공장에서는 상태를 유지할 수 있습니다. 그것은 필요한 것에 달려 있습니다.

정적이라면 정적 인 것이 좋습니다. 첫 번째 인스턴스에서는 좋은 선택이 될 것입니다. - 당신이 문제에 부딪히는 경향이있는 통계를 unittest하려고 시도하는 순간.

특별히 필요로 할 때까지 조종하십시오.

+0

일부 언어의 경우 –

3

아니요, 공장 등급은 기본적으로 고정되어서는 안됩니다. 사실, 정적 클래스는 OOP 세계에서 환영받지 못합니다. 왜냐하면 어떤 상태를 전달할 수 있고 전역 적 어플리케이션 상태를 도입 할 수 있기 때문입니다. 존재할 하나의 팩토리 객체 만 필요하면 싱글 톤 패턴을 통해 생성을 제어 할 수 있습니다.

팩토리 방법 - 정적으로 유지하는 것이 좋습니다. 실제로는 다른 합리적인 방법이 없습니다. :)).

0

BlueCarFactory과 내 RedCarFactory은 모두 createCar입니다. 실제 생성 방법을 매개 변수화하여 재사용하는 것은 상식입니다. 그런 다음 CarFactory(blue)CarFactory(red)을 만듭니다. 즉, CarFactory 객체에는 생성 된 자동차의 색상을 저장하는 멤버 변수가 필요합니다.

결론 : Factory 클래스의 메서드를 정적으로 만드는 것은 의미가 없습니다. Singleton Factory 객체를 만드는 것이 합리적입니다.