팩토리 메소드 패턴 예제

모든 제품이 동일한 인터페이스를 따르도록 합니다. 이 인터페이스는 모든 제품에서 의미가 있는 메서드를 선언해야 합니다. 요즘클래스의 정적 메서드는 필수 클래스 형식의 개체를 반환하는 팩터리 메서드로 널리 사용됩니다. 생성자와 달리 반환하는 실제 개체는 하위 클래스의 인스턴스일 수 있으며 새 개체가 생성되는 대신 기존 개체를 다시 사용할 수도 있습니다. 모든 구체적인 제품은 Product 클래스의 하위 클래스이므로 모두 어느 정도 동일한 기본 구현을 갖습니다. Creator 클래스는 제품의 모든 표준 및 일반 동작을 지정하고 새 제품이 필요할 때 클라이언트가 제공하는 생성 세부 정보를 ConcreteCreator로 보냅니다. 이 다이어그램을 염두에 두고 있으면 이제 관련 코드를 쉽게 생성할 수 있습니다. 다음은 클래식 팩터링 메서드의 구현이 어떻게 보일지 입니다.  의 상황을 살펴보겠습니다.

프로듀스토이 기능의 진짜 문제점은 무엇이었나요? 토이즈팩토리 내부에 콘크리트 클래스가 인스턴스화되어 프로듀스토이() 기능을 엉망으로 만들었다. ToysFactory 클래스는 장난감의 콘크리트 클래스에 묶여 있었다. 의 문제를 보자. 우리는 당신이 우리의 가이드를 즐겼기를 바랍니다! 위에서 읽은 내용은 실제로 „실제 이야기를 통해 디자인 패턴 이해”라는 책의 한 장입니다. 비슷한 방법으로 더 많은 디자인 패턴을 배우고 싶다면 여기에서 책을 확인하십시오. 간단한 공장이 마련되면서 개발자들은 이제 드래곤 사에서 하루를 즐기고 있습니다. 장난감에 대한 철저한 논의에도 불구하고, 우리는 아직 장난감 수업을 실제로 살펴보지 않았습니다. 장난감은 함수 prepare(), 패키지() 및 label()이 있는 추상 클래스입니다.

문제를 피하는 방법? 대답은 정적 (또는 팩터리) 메서드를 만드는 것입니다. 우리가 아래 코드를 보자. 4 단계 : GetPlanFactory를 사용하여 계획 DOMESTICPLAN 또는 상업 계획 또는 기관 계획 유형과 같은 정보를 전달하여 구체적인 클래스의 개체를 얻습니다. 이제 팩터리 메서드에 나열된 각 제품 유형에 대한 작성자 하위 클래스 집합을 만듭니다. 하위 클래스에서 팩터리 메서드를 재정의하고 기본 메서드에서 적절한 구성 코드 비트를 추출합니다. 팩터리 메서드는 템플릿 메서드의 전문화입니다. 동시에 팩터리 메서드는 큰 템플릿 메서드의 단계역할을 할 수 있습니다. 위의 디자인의 문제점은 무엇입니까? 위의 예제에서 관찰해야 하는 것처럼 클라이언트는 개체를 생성하는 동안 일부 입력을 기반으로 TwoWheeler 또는 FourWheeler의 개체를 만듭니다. 도서관에서는 3대의 휠러 차량을 통합할 수 있는 새로운 클래스의 쓰리휠러를 소개합니다. 무슨 일이 일어날까요? 조건부 사다리에서 ThreeWheeler의 개체를 만드는 경우 클라이언트는 새 다른 체인을 종료합니다.

클라이언트를 다시 컴파일해야 합니다. 따라서 라이브러리 측에서 새 변경이 이루어질 때마다 Client는 마지막에 몇 가지 해당 변경 사항을 만들고 코드를 다시 컴파일해야 합니다. 나쁜 소리? 이것은 디자인의 매우 나쁜 관행이다. 팩터리 메서드(클라이언트 코드라고도 함)를 사용하는 코드는 다양한 하위 클래스에서 반환되는 실제 제품 간의 차이를 표시하지 않습니다. 클라이언트는 모든 제품을 추상 전송으로 처리합니다. 클라이언트는 모든 전송 개체에 배달 메서드가 있어야 한다는 것을 알고 있지만 정확히 어떻게 작동하는지는 클라이언트에게 중요하지 않습니다. 반환된 제품의 유형을 제어하기 위해 팩터리 메서드에 임시 매개 변수를 추가해야 할 수 있습니다. 이 시나리오에서는 간단한 팩터리에서 작동하지 않는 것처럼 보입니다.