Factory Pattern

jayk·2023년 7월 5일

Design Pattern

목록 보기
2/2

Factory Pattern은 객체 생성을 대신 수행해주는 공장(Factory)가 있는 패턴이다.

Factory Pattern은 아래와 같은 장단점이 있다.
[장점]

  • 생성할 클래스를 미리 알지 못해도 Factory 클래스가 객체 생성을 담당한다.
  • 객체의 자료형이 하위클래스에 의해서 결정이 되기 때문에 확장이 용이하며, 결합도가 느슨해진다.(Loosely coupled)

[단점]

  • 새로 생성할 객체가 늘어날 때마다, Factory 클래스에 추가해야하기 때문에 불필요하게 많은 클래스가 생성될 수 있음

위와 같은 특성 때문에 아래와 같은 상황에 주로 사용된다.

  • 어떤 클래스가 자신이 생성해야 하는 객체의 클래스를 예측할 수 없을 때
  • 생성할 객체를 기술하는 책임을 자신의 자식 클래스가 지정해야할 때

Java Example

Figure.java

public interface Figure {
	void draw();
}

Circle.java

public class Circle implements Figure {
	@Override
    public void draw() {
    	System.out.println("Circle DRAW");
    }
}

Rectangle.java

public class Rectangle implements Figure {
	@Override
    public void draw() {
    	System.out.println("Rectangle DRAW");
    }
}

Square.java

public class Square implements Figure {
	@Override
    public void draw() {
    	System.out.println("Square DRAW");
    }
}

FigureFactory.java

public class FigureFactory {
	public Figure getFigure(String type) {
    	if ("CIRCLE".equalsIgnoreCase(type) {
        	return new Circle();
            
        } else if ("RECTANGLE".equalsIgnoreCase(type) {
        	return new Rectangle();
            
        }
         else if ("SQUARE".equalsIgnoreCase(type) {
        	return new Square();
            
        }
        return null;
    }
}

Main.java

public class Main {
	public static void main(String[] args) {
    	FigureFactory factory = new FigureFactory();
        Figure fig1 = factory.getFigure("CIRCLE");
        Figure fig2 = factory.getFigure("RECTANGLE");
        Figure fig3 = factory.getFigure("SQUARE");
        
        fig1.draw();
        fig2.draw();
        fig3.draw();
    }
}

main 실행 결과

Circle DRAW
Rectangle DRAW
Square DRAW

참조
[Java] 디자인 패턴 - 팩토리 패턴(Factory pattern)

0개의 댓글