Latest web development tutorials

추상 팩토리 패턴

추상 공장 (추상 팩토리 패턴)은 슈퍼 식물 다른 식물의 주위에 생성됩니다. 이 공장은 또한 슈퍼 다른 공장 공장으로 알려져있다. 디자인 패턴이 유형의 개체를 만들 수있는 가장 좋은 방법을 제공하는 스키마를 작성 속한다.

추상 팩토리 패턴 인터페이스를 명시 적으로 자신의 클래스를 지정하지 않고, 식물 관련 개체를 생성 할 책임이있다. 각 공장 모델을 제공 할 수있는 공장에 따라, 객체를 생성합니다.

소개

의도 : 자신의 구체적인 클래스를 지정하지 않고, 관련 또는 종속 객체 인터페이스의 시리즈를 만듭니다.

주로 해결하기 : 인터페이스 옵션의 가장큰 문제입니다.

사용할 때 시스템 제품은 하나 이상의 제품군을 가지며, 단지 시스템되는 가전 제품의 가족.

해결 방법 : 제품군에 내부, 여러 제품을 정의합니다.

키 코드 : 공장에서 집계 여러 유사 제품.

애플리케이션 예제 : 작업은, 일부 회의에 참여하기 위해, 옷을 두 개 이상의 세트가 있어야 그것은, 말, 심지어 가족을위한 비즈니스 복장 (완전한 세트, 특정 제품의 시리즈), 패션 드레스 (완전한 세트, 특정 제품의 시리즈), 당신은 비즈니스 여성을 가질 수있다, 비즈니스 남성, 여성 패션, 남성 패션, 그들은 완전한 세트, 특정 제품, 즉 일련의도 있습니다.상황을 가정 (현실에 존재하지 않는, 또는 다른 사람이 아닌 공산주의하지만, 추상 팩토리 패턴 설명 찬성), 집, 하나의 옷장 (콘크리트 공장)에서 단지 하나의를 저장할 수 있습니다 의류 (완전한 세트, 특정 제품의 시리즈), 당신은 옷장에서 옷이 세트를 취할 때마다 자연스럽게 촬영. OO는 모든 옷장 (콘크리트 공장을) 이해하는 생각으로 옷장 클래스 (특정 재킷 (특정 제품)을 포함하여 (추상 공장) 하나, 옷의 각 세트 및 특정 바지입니다 ) 제품은 이러한 사실 특정 셔츠 자켓 (추상 제품), 특정 바지 바지입니다 (다른 추상적 제품)입니다.

장점 : 제품의 가족 이상의 개체가 함께 작동하도록 설계 할 때, 우리는 클라이언트가 언제나 동일한 제품군 개체를 사용하도록 할 수 있습니다.

단점 : 확장 제품군 매우 어렵게되고, 추상 제작자 리가 코드 모두 제품의 범위를 증가시키기 위해, 또한 내부의 특정 코드를 추가.

사용 시나리오 1 피부 함께 변화의 세트 QQ.이 다른 운영 체제 절차를 생성한다.

참고 : 확장 된 제품군은 제품 수준을 확장, 어려운 쉽습니다.

실현

우리는이 개체의모양과색상 인터페이스와 구현 클래스 인터페이스를 생성합니다. 다음 단계는 추상 팩토리 클래스AbstractFactory를만드는것입니다.그런 다음 팩토리 클래스ShapeFactory을정의하고ColorFactory,이두 클래스는 공장AbstractFactory를 확장합니다.그런 다음 공장 작성자 / 빌더 클래스FactoryProducer를 만듭니다.

AbstractFactoryPatternDemo,FactoryProducer를 사용하여 우리의 데모 클래스는AbstractFactory개체를 얻을 수 있습니다. 그것은AbstractFactory에정보모양(CIRCLE / RECTANGLE / SQUARE)을 형성통과,그것은 개체의 유형을 얻을 필요가있다. 또한AbstractFactory에색상 정보색상(RED / GREEN /BLUE)는,이오브젝트의 유형을 얻을 필요가 전달합니다.

추상 팩토리 패턴 UML 다이어그램

1 단계

인터페이스 모양을 만들 수 있습니다.

Shape.java

공용 인터페이스 Shape {
   무효 무승부 ();
}

2 단계

인터페이스를 구현 엔티티 클래스를 만듭니다.

Rectangle.java

공용 클래스 직사각형 모양을 {구현

   @Override
   공공 무효 무승부 () {
      에서 System.out.println ( "내부 사각형 :: 무승부 () 메소드.");
   }
}

Square.java

공용 클래스 광장 모양을 {구현

   @Override
   공공 무효 무승부 () {
      에서 System.out.println ( "내부 광장 :: 무승부 () 메소드.");
   }
}

Circle.java

공용 클래스 서클 모양을 {구현

   @Override
   공공 무효 무승부 () {
      에서 System.out.println ( "내부 서클 :: 무승부 () 메소드.");
   }
}

3 단계

색상 인터페이스를 만듭니다.

Color.java

공용 인터페이스 색상 {
   빈 필 ();
}

4 단계

인터페이스를 구현 엔티티 클래스를 만듭니다.

Red.java

공용 클래스 레드 색상을 {구현

   @Override
   공공 무효 채우기 () {
      에서 System.out.println ( "내부 레드 :: 필 () 메소드.");
   }
}

Green.java

공용 클래스 그린 색상을 {구현

   @Override
   공공 무효 채우기 () {
      에서 System.out.println ( "내부 녹색 :: 필 () 메소드.");
   }
}

Blue.java

공용 클래스 블루 색상을 {구현

   @Override
   공공 무효 채우기 () {
      에서 System.out.println ( "내부 블루 :: 필 () 메소드.");
   }
}

5 단계

색상에 대한 추상 클래스를 만들고 공장을 얻기 위해 개체 모양.

AbstractFactory.java

공개 추상 클래스 AbstractFactory {
   추상적 인 색 getColor에서 (문자열 색);
   추상적 인 모양 getShape (문자열 모양);
}

6 단계

주어진 정보를 기반으로 확장 AbstractFactory 팩토리 클래스, 엔티티 클래스 객체 생성을 만듭니다.

ShapeFactory.java

공용 클래스 ShapeFactory는 AbstractFactory를 {확장
	
   @Override
   공공 모양 getShape (문자열 shapeType) {
      경우 (shapeType == NULL) {
         NULL을 반환;
      }		
      경우 (shapeType.equalsIgnoreCase ( "CIRCLE")) {
         ) (새 원을 반환;
      } 그렇지 경우 (shapeType.equalsIgnoreCase ( "직사각형")) {
         () 새로운 사각형을 반환;
      } 그렇지 경우 (shapeType.equalsIgnoreCase ( "SQUARE")) {
         () 새로운 광장을 반환;
      }
      NULL을 반환;
   }
   
   @Override
   색상 getColor에서 (문자열 색) {
      NULL을 반환;
   }
}

ColorFactory.java

공용 클래스 ColorFactory는 AbstractFactory를 {확장
	
   @Override
   공공 모양 getShape (문자열 shapeType) {
      NULL을 반환;
   }
   
   @Override
   색상 getColor에서 (문자열 색) {
      경우 (색상 == NULL) {
         NULL을 반환;
      }		
      경우 (color.equalsIgnoreCase ( "RED")) {
         ) (새 빨간를 반환;
      } 그렇지 경우 (color.equalsIgnoreCase ( "GREEN")) {
         () 새로운 녹색을 반환;
      } 그렇지 경우 (color.equalsIgnoreCase ( "BLUE")) {
         () 새로운 블루를 반환;
      }
      NULL을 반환;
   }
}

7 단계

공장을 얻을 모양이나 색 정보를 통과, 공장 작성자 / 빌더 범주를 만듭니다.

FactoryProducer.java

공용 클래스 FactoryProducer {
   공공 정적 AbstractFactory getFactory (문자열 선택) {
      (choice.equalsIgnoreCase ( "SHAPE")) {만약
         ) (새 ShapeFactory를 반환;
      } 그렇지 경우 (choice.equalsIgnoreCase ( "COLOR")) {
         ) (새 ColorFactory를 반환;
      }
      NULL을 반환;
   }
}

8 단계

엔티티 타입 정보를 전달하여 클래스의 오브젝트를 취득하는 AbstractFactory 얻을 FactoryProducer를 사용한다.

AbstractFactoryPatternDemo.java

공용 클래스 AbstractFactoryPatternDemo {
   공공 정적 무효 메인 (문자열 []에 args) {

      // 공장 모양 AbstractFactory shapeFactory = FactoryProducer.getFactory ( "SHAPE")을 얻으십시오;

      // 객체 모양 원 모양 shape1 가져 오기 = shapeFactory.getShape ( "CIRCLE");

      //) (shape1.draw 원의 그리기 메서드를 호출;

      // 오브젝트 형태의 직사각형 모양 shape2 = shapeFactory.getShape ( "직사각형")을 얻으십시오;

      //) (shape2.draw 사각형의 그리기 메서드를 호출;
      
      // 객체의 모양 사각형 모양 shape3 가져 오기 = shapeFactory.getShape ( "SQUARE");

      //) (추첨 방식 광장 shape3.draw 전화;

      // 가져 오기 컬러 공장 AbstractFactory colorFactory = FactoryProducer.getFactory ( "COLOR");

      // 객체의 색상을 얻기 붉은 색 COLOR1 = colorFactory.getColor ( "RED")입니다;

      //) (fill 메소드 레드 color1.fill 전화;

      // 객체의 색상 그린 색상 COLOR2 = colorFactory.getColor ( "그린")을 얻으십시오;

      //) (녹색의 충전 방법 color2.fill 전화;

      // 객체의 색상 블루 색상 color3 = colorFactory.getColor ( "BLUE")을 얻으십시오;

      //) (fill 메소드 블루 color3.fill 전화;
   }
}

9 단계

출력을 확인합니다.

원 안에 :: 무승부 () 메소드.
사각형 안에 :: 무승부 () 메소드.
광장 내부 :: 무승부 () 메소드.
레드 내부 :: 필 () 메소드.
녹색 :: 필 () 메소드 내부.
블루 내부 : 필 () 메소드.