디자인 패턴 - Factory Pattern

Table of Contents

출처 : https://www.tutorialspoint.com/design_pattern/factory_pattern.htm

Factory 패턴은 자바에서 가장 많이 사용되는 디자인 패턴 중 하나입니다. 이 패턴은 객체를 생성하는 가장 좋은 방법 중 하나를 제공하기 때문에 이러한 유형의 디자인 패턴은 생성 패턴에 속합니다.

Factory 패턴에서는 생성 로직을 클라이언트에 노출시키지 않고 객체를 생성하고 공통 인터페이스를 사용하여 새로 생성된 객체를 참조합니다.

구현

Shape 인터페이스와 Shape 인터페이스를 구현하는 구체적인 클래스를 만들 것입니다. 팩토리 클래스 ShapeFactory가 다음 단계로 정의됩니다.

FactoryPatternDemo, 데모 클래스는 ShapeFactory를 사용하여 Shape 개체를 가져옵니다. 정보(CIRCLE / RECTANGLE / SQUARE)를 ShapeFactory에 전달하여 필요한 개체 유형을 가져옵니다.

팩토리 패턴 UML 다이어그램

1 단계

인터페이스를 만듭니다.

Shape.java

1public interface Shape {
2   void draw();
3}

2 단계

동일한 인터페이스를 구현하는 구체적인 클래스를 만듭니다.

Square.java

1public class Square implements Shape {
2
3   @Override
4   public void draw() {
5      System.out.println("Inside Square::draw() method.");
6   }
7}

Rectangle.java

1public class Rectangle implements Shape {
2
3   @Override
4   public void draw() {
5      System.out.println("Inside Rectangle::draw() method.");
6   }
7}

Circle.java

1public class Circle implements Shape {
2
3   @Override
4   public void draw() {
5      System.out.println("Inside Circle::draw() method.");
6   }
7}

3단계

주어진 정보를 기반으로 구체적인 클래스의 객체를 생성하기 위해 Factory를 생성합니다.

ShapeFactory.java

 1public class ShapeFactory {
 2
 3   //use getShape method to get object of type shape
 4   public Shape getShape(String shapeType){
 5      if(shapeType == null){
 6         return null;
 7      }
 8      if(shapeType.equalsIgnoreCase("CIRCLE")){
 9         return new Circle();
10
11      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
12         return new Rectangle();
13
14      } else if(shapeType.equalsIgnoreCase("SQUARE")){
15         return new Square();
16      }
17
18      return null;
19   }
20}

4단계

Factory를 사용하여 type과 같은 정보를 전달하여 구체적인 클래스의 객체를 가져옵니다.

FactoryPatternDemo.java

 1public class FactoryPatternDemo {
 2
 3   public static void main(String[] args) {
 4      ShapeFactory shapeFactory = new ShapeFactory();
 5
 6      //get an object of Circle and call its draw method.
 7      Shape shape1 = shapeFactory.getShape("CIRCLE");
 8
 9      //call draw method of Circle
10      shape1.draw();
11
12      //get an object of Rectangle and call its draw method.
13      Shape shape2 = shapeFactory.getShape("RECTANGLE");
14
15      //call draw method of Rectangle
16      shape2.draw();
17
18      //get an object of Square and call its draw method.
19      Shape shape3 = shapeFactory.getShape("SQUARE");
20
21      //call draw method of square
22      shape3.draw();
23   }
24}

5단계

출력을 확인합니다.

1Inside Circle::draw() method.
2Inside Rectangle::draw() method.
3Inside Square::draw() method.

이 시리즈의 게시물

댓글