2010-12-09 4 views
2

Go4 디자인 패턴 책을 읽고 현재 공장 방법 패턴을보고 있습니다. 이 책은 대학원에 언급 : (110)팩토리 패턴의 매개 변수화 된 팩토리 - 다른 방법으로 존재합니까?

는 "공장 패턴에 또 다른 변화가 공장 출하 방법은 제품의 여러 종류를 생성 할 수있는 팩토리 메소드는 생성 에 객체의 종류를 식별하는 매개 변수를 사용합니다."

이제는 공장에서 항상 여러 종류의 제품을 만들지 않습니까? 또한 어떤 종류의 제품을 만들지 결정할 때 매개 변수를 보내야 할 필요가 없습니까? 우리가 매개 변수를 전달하지 않으면 팩터 리가 어떤 객체를 생성할지 결정할 것입니다. 다른 varation이 의미하는 바는 무엇입니까? 여기에 요점이 빠졌습니까?

답변

1

그들은 상속 된 유형에 대해 이야기하고 있다고 생각합니다. 따라서 제품에 상위 클래스가 있고 두 개의 하위 클래스가 BetaProductFinishedProduct 인 경우 팩토리 내에서 제어 흐름을 변경하는 일종의 매개 변수를 간단하게 전달하여 어떤 종류의 객체를 생성할지 알 수 있습니다 (BetaProduct 또는 FinishedProduct). 팩토리가 가지고있는 정보에 기반하여 객체의 값을 항상 설정합니다 ... 그러나 제품의 KIND에 대해 이야기 할 때 그것은 자식 클래스의 이름/유형입니다.

+0

그래서 항상 공장에 매개 변수를 전달해야한다는 의미입니까? – Sandbox

+0

아니요, 확실히 아닙니다. 나는 당신 공장이하는 일과 당신이 그것을 어떻게 정의하고 싶은지에 달려 있다고 말할 수 있습니다. 항상 단일 유형의 객체를 만드는 경우 ... param이 필요하지 않습니다. –

+0

죄송합니다. 추상 팩토리가 단일 유형의 객체를 만드는 경우 추상 팩토리로 간주됩니까? – Sandbox

0

데이터베이스 또는 설정 파일 자체에서 값을 찾아 볼 수 귀하의 공장, 그러나이 다음에 전달 된 공장의 외부에서 수행 될 가능성이 높습니다. 당신이 공장을 가지고

+0

@ck : 공장 밖에서는 무엇을 의미합니까? 클라이언트 코드에서? 괜찮습니까? 아니면 공장 로더 클래스 같은 다른 곳 에서요? – Sandbox

2

GOF 조금 혼란 스러울 수 있으며, 공장 방법. 어느 것이 어느 쪽인지 확실하지 마십시오. 전체 텍스트가 없으면 당신이 말하는 것을 말하기 어렵습니다.

일반적으로 생성하는 팩토리 유형 만이 메소드에 의해 반환되는 값을 결정합니다. 피자 팩토리를 가지고 있다면 다른 피자가 다른 피자를 반환합니다. 그러나 팩토리는 어떤 메소드를 만들지를 결정합니다. 이것은 물론 어떤 방법으로 제한됩니다. 왜냐하면 어떤 팩토리를 사용할 것인지 선택하는 것 외에는 무엇이 생성되는지에 영향을 미치지 않기 때문입니다. 그러나이 변형을 사용하는 프레임 워크에서 전체 아이디어입니다. 공장에서는 옵션을 손에서 떼어 낼 수 있으므로 선택할 책임이 없습니다. 기본적으로 당신은 '당신이 가진 것을 내게주세요'라고 말합니다. 예 : 페퍼로니 피자주세요. 그러나 공장에서는 사용하는 공장에 따라 뉴욕 페퍼로니 피자 또는 여분의 페퍼로니 피자를 반품 할 수 있습니다.

팩토리가 전략과 같이 작동하는 경우가 있습니다. 당신은 그것이 무엇을하는지 알고 싶지 않지만, 당신은 어떤 유형을 받기를 원하는지 말할 수 있기를 원합니다. 유형에는 공장이 작업 할 수있는 인터페이스가 있거나 공장 자체가 인터페이스를 필요로하지 않는 단순해야합니다. 여기에서는 '이 유형의 인스턴스를 제공하고 인스턴스를 사용하여 일반적으로하는 모든 작업을 수행하십시오'라고 말합니다. 예 : 여분의 치즈와 함께 피자를 여기에두고 싶습니다.

희망이 도움이됩니다.