factory method 패턴 예제

팩터리(팩터리)를 사용하여 type과 같은 정보를 전달하여 구체적인 클래스의 개체를 가져옵니다. 라이브러리와 클라이언트에 대해 이야기할 때 의미하는 바는 무엇입니까? 라이브러리는 일부 공용 API를 노출하는 일부 타사에서 제공하는 라이브러리이며 클라이언트는 해당 공용 API를 호출하여 작업을 완료합니다. 아주 간단한 예는 안드로이드 OS에서 제공하는 보기의 다른 종류가 될 수 있습니다. 작성자 클래스 내에 빈 팩터리 메서드를 추가합니다. 메서드의 반환 형식은 공통 제품 인터페이스와 일치해야 합니다. 팩터리 메서드는 개체를 만들기 위한 인터페이스를 정의하지만 하위 클래스에서 인스턴스화할 클래스를 결정할 수 있습니다. 사출 성형 프레스는 이 패턴을 보여줍니다. 플라스틱 장난감의 제조 업체는 플라스틱 성형 분말을 처리하고, 원하는 모양의 금형에 플라스틱을 주입한다. 장난감의 클래스 (자동차, 액션 피규어 등)는 금형에 의해 결정됩니다. 추상 팩터리 클래스는 종종 팩터리 메서드 집합을 기반으로 하지만 프로토타입을 사용하여 이러한 클래스에서 메서드를 구성할 수도 있습니다. Factory Method 디자인 패턴은 개체에 인스턴스화해야 하는 클래스와 관련된 모든 정보를 프레임워크 외부에 배치하여 문제를 해결합니다. 조금 더 복잡합니다.

다른 디자인 패턴에는 새 클래스가 필요하지만 팩터리 메서드는 새 작업만 필요합니다. 룸은 최종 제품(매직룸 또는 일반룸)의 기본 클래스입니다. MazeGame은 이러한 기본 제품을 생산하는 추상 적 공장 방법을 선언합니다. 매직룸과 레머룸은 최종 제품을 구현하는 기본 제품의 하위 클래스입니다. MagicMazeGame 및 OrdinaryMazeGame은 최종 제품을 생산하는 공장 방법을 구현하는 MazeGame의 하위 클래스입니다. 따라서 공장 메서드는 호출자(MazeGame)를 콘크리트 클래스의 구현에서 분리합니다. 이렇게 하면 „새로운” 운영자가 중복되고, 개방/폐쇄 원칙을 준수할 수 있으며, 변경 시 최종 제품을 보다 유연하게 만들 수 있습니다. 해결책은 프레임 워크에서 구성 요소를 단일 팩터리 메서드로 구성하는 코드를 줄이고 구성 요소 자체를 확장하는 것 외에도 누구나이 메서드를 재정의할 수 있도록하는 것입니다. 물론 이 방법을 다른 UI 요소에도 적용할 수 있습니다. 그러나 대화 상자에 추가할 때마다 추상 팩터리 패턴에 더 가까워지요. 두려워하지 말고, 우리는 나중에이 패턴에 대해 이야기 할 것입니다.

둘째, SimpleFactory를 사용하여 원하는 장난감을 만듭니다: Factory Method 패턴은 직접 객체 구성 호출(새 연산자 사용)을 특수 팩터리 메서드에 대한 호출로 대체하는 것을 제안합니다. 걱정하지 마세요: 개체는 여전히 새 연산자를 통해 만들어지지만 팩터리 메서드 내에서 호출됩니다. 팩터리 메서드에서 반환되는 개체를 „제품”이라고도 합니다. 하위 클래스는 팩터리 메서드에서 반환되는 개체의 클래스를 변경할 수 있습니다. 위의 코드에서 iPerson라는 하나의 인터페이스와 주민및 CityPerson라는 두 개의 구현을 만들 수 있습니다. 팩토리 개체에 전달된 형식에 따라 원래 콘크리트 오브젝트를 인터페이스 IPerson로 반환합니다. 위의 코드 조각에서 MazeGame 생성자는 몇 가지 일반적인 논리를 만드는 템플릿 메서드입니다.