본문 바로가기

프로그래밍/자바 디자인 패턴

자바 디자인 패턴 튜토리얼 - 자바 디자인 패턴 - 팩토리 패턴

반응형

공장 패턴은이 패턴이 오브젝트를 생성하는 더 좋은 방법을 제공하므로 생성 패턴입니다.

Factory 패턴에서는 생성 논리를 클라이언트에 노출시키지 않고 객체를 생성합니다.

예제

다음 섹션에서는 팩토리 패턴을 사용하여 객체를 생성하는 방법을 보여줍니다.

팩터 리 패턴에 의해 생성 된 객체는 원, 직사각형 등의 모양 객체입니다.

먼저 셰이프를 나타 내기위한 인터페이스를 디자인합니다.

public interface Shape { void draw(); }

그런 다음 인터페이스를 구현하는 구체적인 클래스를 작성합니다.

다음 코드는 Rectangle.java를위한 코드입니다.

public class Rectangle implements Shape { @override public void draw() { System.out.println( "내부 직사각형 :: draw() 메서드." ); } }

Square.java

public class Square implements Shape { @override public void draw() { System.out.println( "내부 사각형 :: draw() 메서드." ); } }

Circle.java

public class Circle implements Shape { @override public void draw() { System.out.println( "내부 원형 :: draw () 메서드." ); } }

핵심 팩토리 패턴은 Factory 클래스입니다. 다음 코드는 Shape 객체에 대한 Factory 클래스를 만드는 방법을 보여줍니다.

ShapeFactory 클래스는 getShape () 메서드에 전달 된 String 값을 기반으로 Shape 객체를 만듭니다. String 값이 CIRCLE이면 Circle 객체를 만듭니다.

public class ShapeFactory { // getShape 메서드를 사용하여 shape 유형의 객체를 가져옵니다. public Shape getShape (String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase( "CIRCLE" )) {

return new Circle(); } else if (shapeType.equalsIgnoreCase( "RECTANGLE" )) {

return new Rectangle(); } else if (shapeType.equalsIgnoreCase( "SQUARE" )) {

return new Square(); } return null; } }

다음 코드는 main 메소드를 가지고 있으며, Factory 클래스를 사용하여 타입과 같은 정보를 전달하여 구체적인 클래스의 객체를 얻습니다.

public  class Main {

   public  static void main (String [] args) {
      ShapeFactory shapeFactory = 새로운 ShapeFactory ();

      // 원의 객체를 얻을  의 무승부 메서드를 호출합니다.
      Shape shape1 = shapeFactory.getShape( "CIRCLE" );

      // Circle의 call draw 메소드
      shape1.draw();

      // 사각형의 객체를 얻을  의 무승부 메서드를 호출합니다.
      Shape shape2 = shapeFactory.getShape( "RECTANGLE" );

      // Rectangle의 draw 메소드를 호출한다.
      shape2.draw ();

      // 광장의 객체를 얻을  의 무승부 메서드를 호출합니다.
      Shape shape3 = shapeFactory.getShape( "SQUARE" );

      // 원 그리기 방법 호출
      shape3.draw ();
   }
}

위의 코드는 다음 결과를 생성합니다.

내부 원형 :: draw () 메서드.

내부 직사각형 :: draw() 메서드.

내부 사각형 :: draw() 메서드.

반응형