최근에 팩토리 패턴과 추상 팩토리 패턴을 읽다가 심화 PHP 책을 두 번 읽었는데, 그래도 헷갈려서 Du Niang에게 물어본 블로그 글이 있는 것 같아요. . 이것이 의미가 있습니다:
팩토리 메소드
팩토리 메소드는 각 제품에 대한 팩토리 클래스를 제공합니다. 다양한 제품 인스턴스는 다양한 팩토리 인스턴스를 통해 생성됩니다.
동일한 계층 구조에서는 어떤 제품이든 추가할 수 있습니다.
추상공장
추상공장은 제품군 개념에 대응한다. 예를 들어, 각 자동차 회사는 자동차, 트럭, 버스를 동시에 생산하기를 원할 수 있으므로 각 공장에는 자동차, 트럭, 버스를 만드는 방법이 있어야 합니다.
제품군 개념에 부응하여 탄생한 제품으로, 새로운 제품군의 추가는 쉽지만 새로운 제품의 추가는 불가능합니다.
자세한 내용은 블로그 포스팅 참조
간단히 말해서 팩토리 방식은 같은 레벨의 서로 다른 제품을 생산하는 것이고, 추상 팩토리는 서로 다른 제품군을 생산하는 것이고 팩토리 방식은 추상 공장에서 자주 사용됩니다.
먼저 팩토리 메소드를 소개하겠습니다.
약속 개체를 관리해야 하는 인사 관리 프로젝트가 있고 약속에 대해 소통하기 위해 BloggsCal 또는 MegaCal 형식을 사용해야 한다고 가정해 보겠습니다. 물론 시간이 지남에 따라 필요한 형식이 확실히 늘어날 것입니다. (내 생각에는 여기의 형식은 공장 모드의 제품과 동일합니다.)
인터페이스 수준에서는 두 개의 클래스를 정의할 수 있습니다. 하나는 Appointment 개체를 독점 형식으로 변환하고 이름을 AppEncoder 클래스(제품 제품)로 지정해야 하며, 다른 하나는 관리자가 이 인코더를 가져와서 이름을 CommsManager 클래스로 지정해야 합니다.
다음으로 코드를 살펴보겠습니다.
<code><span>abstract</span><span><span>class</span><span>ApptEncoder</span>{</span><span>abstract</span><span><span>function</span><span>encode</span><span>()</span>;</span> } <span><span>class</span><span>BloggsApptEncoder</span><span>extends</span><span>ApptEncoder</span>{</span><span><span>function</span><span>encode</span><span>()</span>{</span><span>return</span><span>"Appointment data encode in BloggsCal format \n"</span>; } } <span>abstract</span><span><span>class</span><span>CommsManager</span>{</span><span>abstract</span><span><span>function</span><span>getHeadText</span><span>()</span>;</span><span>abstract</span><span><span>function</span><span>getApptEncoder</span><span>()</span>;</span><span>abstract</span><span><span>function</span><span>getFooterText</span><span>()</span>;</span> } <span><span>class</span><span>BloggsCommsManager</span><span>extends</span><span>CommsManager</span>{</span><span><span>function</span><span>getHeadText</span><span>()</span>{</span><span>return</span><span>"BloggsCal header\n"</span>; } <span><span>function</span><span>getApptEncoder</span><span>()</span>{</span><span>return</span><span>new</span> BloggsApptEncoder(); } <span><span>function</span><span>getFooterText</span><span>()</span>{</span><span>return</span><span>"BloggsCal footer \n"</span>; } }</code>
여기에서는 제품을 만드는 것과 동일한 BloggsCal 형식만 작성했습니다. MegaCal과 같은 다른 형식을 추가하는 경우 ApptEncoder 클래스만 상속하면 됩니다. CommsManager 클래스입니다. 이것이 팩토리 메소드입니다.
그런데 이 패턴이 특별한 종류의 코드 중복을 형성하고, 불필요한 인스턴스화를 초래할 수 있다는 사실을 발견하셨나요? 따라서 사용 시 팩토리 패턴을 사용하기 전에 신중하게 고려해야 합니다.
추상 팩토리를 소개하겠습니다.
위에서 언급했듯이 팩토리 패턴은 다양한 제품을 생산하는 데 사용되고 추상 팩토리는 다양한 제품군을 생성하는 데 사용됩니다. 이전 예제를 계속해 보겠습니다.
이때 프로젝트에는 더 이상 Appointment(약속) 기능이 하나만 포함되어 있지 않습니다. Ttd(할일 항목) 및 Contact(연락처) 기능을 추가해야 합니다. 이는 클래스 다이어그램을 작성하는 것입니다. 저장하기 위해 코드를 작성했는데 더 명확해졌습니다.
위 내용은 PHP의 팩토리 패턴과 추상 팩토리에 대한 내용을 포함하여 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.