Latest web development tutorials

공장 모드

초기 패턴 (초기 패턴) 자바는 가장 일반적으로 사용되는 설계 패턴 중 하나이다. 디자인 패턴이 유형의 개체를 만들 수있는 가장 좋은 방법을 제공하는 스키마를 작성 속한다.

초기 모드에서, 우리는 객체를 생성 할 때 논리를 생성하기 위해 클라이언트에 노출되지 않으며, 공통 인터페이스를 이용하여 새롭게 생성 된 객체를 가리.

소개

의도 : 생성 된 객체의 인터페이스의정의, 서브 클래스는 공장, 서브 클래스에 지연을 만드는 과정을 할 수있는 공장 패턴을 인스턴스화하는 클래스를 결정할 수 있습니다.

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

때 사용하는 우리가 명시 적으로 서로 다른 조건의 계획에 따라 다른 인스턴스를 만들 때.

해결 방법 : 서브 클래스가 공장 인터페이스를 구현하자, 그것은 반환 추상적 인 제품입니다.

키 코드 : 하위 클래스에서 실행되는 생성 과정.

응용 프로그램의 예 : 1, 당신은 차가 필요, 당신은 자동차가 자동차 내부의 구현뿐만 아니라, 그것을 수행하는 방법입니다 파이프 않고, 직접 공장 내부에서 선택할 수 있습니다.2, 최대 절전 모드 교환 데이터베이스를 단순히 변경하는 방언 및 운전이 될 수 있습니다.

장점 : 1, 발신자 그냥에 그 이름을 알고, 객체를 생성하고 싶었다.2, 높은 확장 성, 당신이 한 공장 클래스의 확장이 될 수 있으므로 제품을 추가하려는 경우. 3, 제품 실현 차폐 호출자은 제품 인터페이스 우려.

단점 : 각 우리 콘크리트 공장을 달성하기 위해 클래스 및 객체를 추가해야하는 제품을 증대되므로 시스템 증가 클래스의 수는 기하 급수적으로, 어느 정도, 시스템의 복잡성이 증가 할뿐만 아니라, 시스템의 특정 클래스를 증대 의존.이것은 좋은 일이 아니다.

사용 시나리오 : 1, 로거 : 기록은 로컬 하드 디스크, 시스템 이벤트, 원격 서버에 기록 될 수있다, 사용자는 어딘가에 로그인 할 수 있습니다.이 사용자는 최종 시스템의 종류의 데이터베이스를 사용하여, 데이터베이스가 변경 될 알고 않는 데이터베이스 액세스. (3) 상기 서버와의 연결을위한 프레임 워크를 설계, 세 계약 "POP3", "IMAP", "HTTP"는 제품의 종류와 같은 수있는 세 가지 공통 인터페이스를 달성하기 위해 필요하다.

참고 : 클래스로, 모드를 만들 수는 복잡한 객체를 생성하는 데 필요한 위치에 관계없이, 당신은 팩토리 메소드 패턴을 사용할 수 있습니다.주의 할 점은 공장 패턴을 사용하여 복잡한 개체 및 간단한 개체의 장소, 특히, 단지 공장 모델을 사용하지 않고 만든 새 개체 완료 될 필요가 있다는 것입니다. 만약 공장 패턴을 사용하는 경우는 팩토리 클래스를 도입 할 필요가 있고, 이는 시스템의 복잡성을 증가시킬 것이다.

실현

우리는 엔티티 클래스 인터페이스 및 구현모양Shape 인터페이스를 생성합니다. 다음 단계는 팩토리 클래스의ShapeFactory을정의하는것입니다.

FactoryPatternDemo, 우리의데모는 클래스가ShapeFactoryShape 객체를 사용하여 얻을 수 있습니다. 그것은ShapeFactory에대한 정보(CIRCLE/ RECTANGLE / SQUARE)을전송합니다,그것은 개체의 유형을 얻을 필요가있다.

공장 패턴 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 단계

주어진 정보에 기초하여 객체 엔티티 클래스를 생성하는 공장을 만든다.

ShapeFactory.java

공용 클래스 ShapeFactory {
	
   // 사용 getShape 방법 형 모양 공공 모양 getShape (문자열 shapeType)의 객체를 얻을 수 {
      경우 (shapeType == NULL) {
         NULL을 반환;
      }		
      경우 (shapeType.equalsIgnoreCase ( "CIRCLE")) {
         ) (새 원을 반환;
      } 그렇지 경우 (shapeType.equalsIgnoreCase ( "직사각형")) {
         () 새로운 사각형을 반환;
      } 그렇지 경우 (shapeType.equalsIgnoreCase ( "SQUARE")) {
         () 새로운 광장을 반환;
      }
      NULL을 반환;
   }
}

4 단계

타입 정보를 전달하여 클래스의 엔티티 객체를 얻기 위해 공장을 사용합니다.

FactoryPatternDemo.java

공용 클래스 FactoryPatternDemo {

   공공 정적 무효 메인 (문자열 []에 args) {
      ShapeFactory shapeFactory = 새로운 ShapeFactory ();

      // 서클 오브젝트를 취득, 그 그리기 방법 모양 shape1 = shapeFactory.getShape ( "CIRCLE")을 호출;

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

      // 사각형 오브젝트를 취득, 그 그리기 방법 모양 shape2를 호출 = shapeFactory.getShape ( "직사각형");

      //) (shape2.draw 사각형의 그리기 메서드를 호출;

      // 광장 오브젝트를 취득, 그 그리기 방법 모양 shape3 = shapeFactory.getShape ( "SQUARE")을 호출;

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

5 단계

출력을 확인합니다.

원 안에 :: 무승부 () 메소드.
사각형 안에 :: 무승부 () 메소드.
광장 내부 :: 무승부 () 메소드.