해당 행사 :
7.3 공장 모델의 적용 가능한 경우
새 개체를 만드는 가장 쉬운 방법은 새로운 키워드 및 구체적인 클래스를 사용하는 것입니다. 객체 공장을 생성하고 유지하는 데 있어서는 어떤 경우에만 돈의 가치가있을 수 있습니다. 이 섹션에서는 이러한 경우를 요약합니다.
7.3.1 동적 구현
이전 자전거 예제와 같이 다른 방식으로 동일한 인터페이스를 구현하는 객체를 만들어야하는 경우 공장 방법이나 간단한 공장 객체를 사용하여 구현을 선택하는 프로세스를 단순화 할 수 있습니다. 이 선택은 명시 적으로 또는 암시 적으로 이루어질 수 있습니다. 전자는 자전거 예와 같으며 고객은 필요한 자전거 모델을 선택할 수 있습니다. 다음 섹션에서 언급 된 XHR 공장 예는 후자에 속합니다. 이 예제에서 반환 된 연결 객체의 유형은 감지 된 대역폭 및 네트워크 지연 계수에 따라 다릅니다. 이러한 상황에서는 일반적으로 동일한 인터페이스를 구현하고 동일하게 처리 할 수있는 일련의 클래스를 처리해야합니다. 이것이 JavaScript에서 공장 패턴을 사용하는 가장 일반적인 이유입니다.
7.3.2 설정 오버 헤드를 저장합니다
객체가 서로 복잡하고 관련이 있어야하는 경우, 공장 모드를 사용하면 각 객체에 필요한 코드의 양이 줄어들 수 있습니다. 이 설정이 특정 유형의 모든 인스턴스에 대해 한 번만 수행되면이 효과가 특히 두드러집니다. 이 설정 코드를 클래스 생성자에 넣는 것은 효율적인 접근 방식이 아닙니다. 설정 작업이 완료 되더라도 새 인스턴스가 생성 될 때마다 코드가 여전히 실행되므로 설정 코드를 다른 클래스에 배포합니다. 공장 방법은이 경우에 적합합니다. 필요한 모든 객체를 인스턴스화하기 전에 한 번에 설정할 수 있습니다. 얼마나 많은 클래스가 인스턴스화되어 있더라도이 방법은 설정 코드를 한 곳에 유지할 수 있습니다.
사용 된 클래스에 외부 라이브러리를로드 해야하는 경우 특히 유용합니다. 공장 방법은 이러한 라이브러리를 확인하고 찾을 수없는 라이브러리를 동적으로로드 할 수 있습니다. 이러한 설정 코드는 한 곳에서만 존재하므로 나중에 수정하는 것이 훨씬 편리합니다.
7.3.3 많은 작은 물체로 큰 물체를 만드십시오
공장 방법은 많은 작은 물체를 캡슐화하는 객체를 만드는 데 사용될 수 있습니다. 자전거 물체의 생성자를 고려하십시오. 자전거에는 휠, 프레임, 변속기 구성 요소 및 브레이크와 같은 많은 작은 서브 시스템이 포함되어 있습니다. 서브 시스템과 더 큰 물체 사이의 강한 커플 링을 원하지 않지만 런타임에 많은 서브 시스템에서 선택하려면 공장 접근 방식이 이상적인 선택입니다. 이 기술을 사용하면 언젠가 어떤 종류의 체인으로 판매하는 모든 자전거와 일치 할 수 있으며, 다음날 더 좋아하는 체인을 찾으면이 새로운 품종을 대신 사용할 수 있습니다. 이 자전거 클래스의 생성자는 특정 체인 품종에 의존하지 않기 때문에이 변경을 쉽게 구현할 수 있습니다. 이 장의 뒷부분의 RSS Reader 예제는 이와 관련하여 공장 모델의 사용을 보여줍니다.
공장 패턴은 주로 객체를 만드는 인터페이스를 제공합니다. 공장 모델은 "Java and Pattern"의 용어에 따라 세 가지 범주로 나뉩니다.
1. 간단한 공장
2. 공장 방법
3. 초록 공장
이 세 가지 패턴은 점차적으로 위에서 아래로 추상적이며 더 일반적입니다. 간단한 공장 모델을 공장 방법 모델의 특수 사례로 간주하는 분류 방법이 있으며,이 둘은 동일한 범주로 분류됩니다. 공장 모드가 사용되는 두 가지 상황은 다음과 같습니다.
1. 인코딩 할 때 어떤 종류의 인스턴스를 만들어야하는지 예측할 수 없습니다.
2. 시스템은 제품 클래스 인스턴스가 생성, 결합 및 표현되는 방법에 대한 세부 사항에 의존해서는 안됩니다.
3. 간단한 공장 모델
이름에서 알 수 있듯이이 모델 자체는 간단하며 비즈니스가 더 간단한 상황에서 사용됩니다.
그것은 세 가지 역할로 구성됩니다 (관계는 아래의 클래스 다이어그램 참조) : :
1. 공장 역할 : 이것은 특정 비즈니스 논리 및 판단 논리를 포함하는이 모델의 핵심입니다. Java에서는 종종 콘크리트 클래스에 의해 구현됩니다.
2. 초록 제품 역할 : 일반적으로 특정 제품 또는 구현 된 인터페이스에 의해 상속 된 부모 클래스입니다. Java의 인터페이스 또는 추상 클래스로 구현됩니다.
3. 특정 제품 역할 : 공장 클래스에서 만든 객체는이 역할의 사례입니다. Java의 콘크리트 클래스에 의해 구현되었습니다.
그렇다면 간단한 공장 모델을 사용하는 방법은 무엇입니까? 예를 들어 드리겠습니다. 나는 이것이 긴 이론적 텍스트 설명보다 이해하기가 훨씬 쉽다고 생각합니다! 누바 리치의 치료는 다음과 같습니다. p
간단한 공장 모델을 사용한 후 Nouveau Riche는 이제 차에 앉아 운전자에게 "운전"이라고 말하면됩니다. 그것이 어떻게 구현되는지 봅시다 :
// 추상 제품 역할 공개 인터페이스 카 {public void drive (); } // 특정 제품 역할 공개 클래스 Benz는 CAR {public void drive () {System.out.println ( "Driving Benz"); }} public class bmw는 {public void drive () {System.out.println ( "Drive BMW")을 구현합니다. }}. . . (Audi : P를 쓰지 않음) // 공장 클래스 역할 공개 클래스 드라이버 {// 팩토리 메소드 // 반환 유형은 추상 제품 역할 공개 정적 자동차 드라이버 카 (Strows S)이 예외 {// 판사 논리를 던지고 (s.equalsignorecase ( "Benz")) If If (S.EqualSignoreCase ( "Benz"))를 반환합니다. else if (s.equalsignorecase ( "bmw")) 새로운 bmw ()를 반환합니다. ...... 그렇지 않으면 새로운 예외를 던지십시오 (); . . . // Nouveau Riche를 환영합니다. // 명령을 제공합니다 : drive (); . .모든 클래스를 하나의 파일에 넣으면 하나의 클래스 만 공개적으로 선언된다는 것을 잊지 마십시오. 프로그램의 수업 간의 관계는 다음과 같습니다.
이것은 간단한 공장 모델입니다. 다음은 다음과 같습니다.
우선, 간단한 공장 모델을 사용한 후, 우리의 프로그램은 "병"이 아니며 현실과 더 일치합니다. 그리고 고객은 제품 객체를 직접 생성 할 책임이 면제되지만 Nouveau Riche와 마찬가지로 제품 소비에만 책임이 있습니다.
개방 및 폐쇄 원리에서 간단한 공장 모델을 분석하겠습니다. Nouveau Riche가 추상 제품이 공식화 한 계약을 충족하는 한 자동차를 추가하면 공장에 통보되는 한 고객이 사용할 수 있습니다. 따라서 제품 부분의 경우, 개방 및 폐쇄의 원리 - 확장 및 수정 폐쇄의 원리를 준수합니다. 그러나 자동차가 추가 될 때마다 해당 비즈니스 논리 및 판단 논리가 공장 클래스에 추가되어야하며, 이는 자연스럽게 개방 및 폐쇄 원리를 위반하는 공장에 해당하는 비즈니스 논리 및 판단 논리가 추가되어야하기 때문에 공장 부분은 이상적이지 않은 것 같습니다.
그러한 공장 수업 (우리의 경우 운전자의 경우)의 경우, 우리는 그것을 전능하신 계급 또는 신의 수업이라고 부릅니다.
우리가 제공하는 예는 가장 간단한 경우이며 실제 응용 분야에서 제품은 다단계 트리 구조 일 가능성이 높습니다. 간단한 공장 모델에는이 제품에 해당하는 공장 클래스가 하나만 있기 때문에, 이것은 우리의 신 수업을 망칠 수 있으며, 우리의 사랑스러운 프로그래머 :(
앞에서 언급했듯이 간단한 공장 모델은 비즈니스가 간단한 상황에 적합합니다. 그러나 복잡한 비즈니스 환경에는 적응할 수 없습니다. 이것은 공장 방법 모델에 의해 수행되어야합니다! !
4. 공장 방법 모델
먼저 그 구성을 살펴 보겠습니다.
1. 초록 공장 역할 : 이것은 공장 방법 패턴의 핵심이며 응용 프로그램과 관련이 없습니다. 특정 공장 역할이 구현 해야하는 인터페이스 또는 상속 해야하는 부모 클래스입니다. Java에서는 추상 클래스 또는 인터페이스에 의해 구현됩니다.
2. 특정 공장 역할 : 특정 비즈니스 로직과 관련된 코드가 포함되어 있습니다. 응용 프로그램에서 호출하여 해당 특정 제품 객체를 생성합니다. Java에서는 콘크리트 클래스에 의해 구현됩니다.
3. 추상 제품 역할 : 특정 제품 또는 구현 된 인터페이스에 의해 상속 된 부모 클래스입니다. Java에는 일반적으로 추상 클래스 나 인터페이스를 구현할 수 있습니다.
4. 특정 제품 역할 : 특정 공장 역할에 의해 생성 된 대상은이 역할의 예입니다. Java의 콘크리트 클래스에 의해 구현되었습니다.
클래스 다이어그램을 사용하여 그들 사이의 관계를 명확하게 나타냅니다.
완전한 예제를 사용하여 공장 모델의 다양한 역할이 어떻게 조정되는지 확인합시다. 누보 풍부 사업에 대해 말하면, 점점 더 많은 자동차가 좋아합니다. 이로 인해 운전자가 고통을 겪었습니다. 그는 어떤 차를 기억하고 유지해야했고, 그것을 사용해야했습니다! 그래서 누보 부자는 그와 동정하고 말했다. 그것은 나와 함께 당신의 시대에 달려있다. 나는 당신에게 몇 명의 직원을 지정할 것입니다. 따라서 공장 방법 모델의 관리가 등장했습니다. 코드는 다음과 같습니다.
// 추상 제품 역할, 특정 제품 역할은 간단한 공장 모델과 유사하지만 조금 더 복잡해졌습니다. 여기에 약간 생략됩니다. // 초록 공장 역할 공공 인터페이스 드라이버 {public car drivercar (); } public class benzdriver는 드라이버 {public car drivercar () {return new Benz (); }} public class bmwdriver 구현 드라이버 {public car drivercar () {return new bmw (); }} ...... // 특정 제품과 해당 관계를 형성해야합니다. 자동차 자동차 = 드라이버. 드리버 카 (); car.drive (); } catch (예외 e) {}}}공장 방법은 간단한 공장 패턴에서 콘크리트 클래스를 핵심으로 사용하는 대신 추상 공장 역할을 핵심으로 사용합니다. Factory Method Model이 우리에게 무엇을 가져 왔는지 살펴 보겠습니다. 공장 방법 모델을 분석하려면 열고 닫는 원리를 사용하십시오. 초록 제품 역할과 추상 공장 역할에 의해 제공되는 계약에 따라 생성되는 신제품 (즉, Nouveau Riche의 자동차)이 생성되면 기존 코드를 수정하지 않고도 고객이 사용할 수 있습니다. 공장 방법 모델은 개방 및 폐쇄 원리와 완전히 일치하는 것 같습니다!
공장 접근 모델을 사용하면 우리가 만날 수있는 대부분의 비즈니스 요구에 대처하기에 충분합니다. 그러나 많은 유형의 제품이 있으면 많은 수의 해당 공장 카테고리가 나타나며, 이는 우리가 희망하지 않아야합니다. 따라서이 경우 공장 방법 패턴과 결합하여 공장 클래스를 줄이기 위해 간단한 공장 패턴을 사용하는 것이 좋습니다.
물론, 특별한 상황은 특별한 처리로 처리되어야합니다. 시스템의 다른 제품 트리와 제품 트리에 제품 패밀리가있는 경우,이 경우 추상 공장 모델이 사용될 수 있습니다.
5. 요약
Simple Factory Model 및 Factory Method 모델에서 제공 한 영감을 살펴 보겠습니다.
우리가 예제를 구현하기 위해 공장 패턴을 사용하지 않는다면, 코드는 훨씬 적을 것입니다. 다형성을 사용하지 않고 기존 자동차를 구현하십시오. 그러나 유지 가능성 측면에서 확장 성은 매우 열악합니다 (자동차를 추가 한 후에 만지고 싶은 클래스를 상상할 수 있습니다). 따라서 확장 성과 유지 보수를 향상시키기 위해 더 많은 코드를 작성하는 것이 좋습니다.
6. 추상 공장 패턴
먼저 제품 제품군이 무엇인지 이해해 봅시다 : 다른 제품 계층 및 구조물에 위치한 기능으로 구성된 제품군. 이 문장을 읽음 으로써이 개념을 명확하게 이해할 수 있다면, 나는 당신을 존경해야합니다. 예제를 사용하여 생생하게 설명합시다.
그림의 BMWCAR 및 BENZCAR은 두 개의 제품 트리 (제품 계층)입니다. 그림과 같이 Benzsportscar와 Bmwsportscar는 하나의 제품 패밀리입니다. 그들은 모두 스포츠카 제품군에 배치 될 수 있으므로 기능은 관련이 있습니다. 마찬가지로, BMWBUSSINESSCAR 및 BENZSPORTSCAR도 동일한 제품 패밀리입니다.
추상 제품 모델의 주제로 돌아가서, IT와 공장 방법 모델의 차이는 객체를 만들 필요성의 복잡성에 있다고 말할 수 있습니다. 또한 추상 공장 모델은 세 가지 중에서 가장 추상적이며 일반적인 것입니다. 추상 공장 패턴의 목적은 여러 제품 패밀리에서 제품 객체를 만들기 위해 클라이언트에게 인터페이스를 제공하는 것입니다. 또한 추상 공장 패턴을 사용할 때는 다음과 같은 조건을 충족해야합니다.
1. 시스템에는 여러 제품군이 있으며 시스템은 한 번에 제품 중 하나만 소비 할 수 있습니다.
2. 동일한 제품 제품군에 속하는 제품을 사용하십시오.
추상 공장 패턴의 다양한 역할을 살펴 보겠습니다 (공장 방법과 정확히 동일).
초록 공장 역할 : 이것은 공장 방법 패턴의 핵심이며 응용 프로그램과 관련이 없습니다. 특정 공장 역할이 구현 해야하는 인터페이스 또는 상속 해야하는 부모 클래스입니다. Java에서는 추상 클래스 또는 인터페이스에 의해 구현됩니다.
특정 공장 역할 : 특정 비즈니스 로직과 관련된 코드가 포함되어 있습니다. 응용 프로그램에서 호출하여 해당 특정 제품 객체를 생성합니다. Java에서는 콘크리트 클래스에 의해 구현됩니다.
추상 제품 역할 : 특정 제품 상속의 부모 클래스 또는 구현 인터페이스입니다. Java에는 일반적으로 추상 클래스 나 인터페이스를 구현할 수 있습니다.
특정 제품 역할 : 특정 공장 역할에 의해 생성 된 객체는이 역할의 사례입니다. Java의 콘크리트 클래스에 의해 구현되었습니다.
처음 두 모드를 읽은 후이 모드의 다양한 문자 간의 조정에 대한 명확한 아이디어가 있어야하므로 구체적인 예를 제시하지 않습니다. 추상 공장 모델을 사용하기위한 조건을 충족시키는 데주의를 기울여야합니다. 그렇지 않으면 여러 제품 트리가 있더라도 여전히 제품 패밀리가 있지만 사용할 수는 없습니다.
위의 기사는 Java의 세 가지 공장 모델을 깊이 이해하고 있습니다. 이것은 내가 당신과 공유하는 모든 콘텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.