팩토리 메서드: 객체 생성을 위한 인터페이스를 정의하고 하위 클래스가 어떤 클래스를 인스턴스화하도록 합니다. 팩토리 메서드는 클래스의 하위 클래스 인스턴스화를 지연합니다.
단순 팩토리와의 차이점: 단순 팩토리는 원래 클래스를 수정해야 하므로 열기 및 닫기 원칙을 위반합니다. 팩토리 메소드는 이러한 클래스 문제를 방지합니다. 객체 생성 프로세스를 캡슐화하는 장점을 유지하고 팩토리 클래스만 추가하면 되므로 간단한 팩토리 분기 판단 문제가 해결됩니다.
Factory 메서드 패턴에는 네 가지 역할이 포함됩니다.
Product: abstract product
ConcreteProduct: 구체적인 product
Factory: abstract Factory
ConcreteFactory : 특정 공장
UML 클래스 다이어그램
여기에서 알아보기 Lei Feng, 예를 들어, 공장 방법 모델을 사용하고 Lei Feng의 방법을 추상 공장에 해당하는 추상 제품으로 간주합니다. Lei Feng에서 배우는 사람들은 이를 구체적인 공장에 해당하는 구체적인 제품으로 간주합니다. 레이펑에게 배우는 사람들의 카테고리를 추가하려면 원래 카테고리를 수정하지 않고 해당 카테고리만 추가하면 됩니다.
테스트 사례:
[code]int main(){ //工厂方法 IFactory *factory = new UnderGraduateFactory; //new一个大学生工厂 //创建学雷锋的学生 LeiFeng *student = factory->createLeiFeng(); //学生干了哪些雷锋方法 student->BuyRice(); //买米 student->Sweep(); //扫地 student->Wash(); //清洗 return 0; }
Lei Feng 클래스(추상적 제품):
[code]class LeiFeng{ public: virtual void BuyRice(){ std::cout << "Buy rice.\n"; } virtual void Sweep(){ std::cout << "Sweep.\n"; } virtual void Wash(){ std::cout << "Wash.\n"; } };
Lei Feng에서 배우는 사람들(특정 제품):
[code]class UnderGraduate: public LeiFeng{ }; //学雷锋的志愿者(具体产品) class Volunteer: public LeiFeng{ };
Lei Feng 팩토리 클래스(추상 팩토리):
[code]class IFactory{ public: //创建学雷锋对象 virtual LeiFeng* createLeiFeng(){ return NULL; } };
Lei Feng의 객체 팩토리에서 배우기(콘크리트 팩토리):
[code]class UnderGraduateFactory: public IFactory{ LeiFeng* createLeiFeng(){ return new UnderGraduate; } }; class VolunteerFactory: public IFactory{ LeiFeng* createLeiFeng(){ return new Volunteer; } };
위는 C++ 디자인의 팩토리 메소드 패턴을 간략하게 이해한 내용입니다. 패턴 관련 더 자세한 내용은 PHP 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!