Java Design Pattern - Factory Pattern
업데이트:
Design Pattern
- 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
- 디자인 패턴은 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계 방법을 정리한 코딩 방법론일 뿐이며 모든 상황의 해결책이 아니다.
Creational Patterns, 생성 패턴
- 객체가 생성되는 방식을 중시하는 패턴이다.
- 객체의 생성과 조합을 캡슐화하여 객체가 생성 혹은 수정되어도 전체 프로그램 구조에 영향을 받지 않도록 유연성을 제공한다.
Factory Method Pattern
- 객체 생성을 서브 클래스로 분리해 처리하도록 캡슐화하는 패턴이다.
Example
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
public enum ShapeType {
CIRCLE, RECTANGLE, SQUARE;
}
public class ShapeFactory {
public Shape getShape(ShapeType shapeType) {
switch (shapeType) {
case CIRCLE:
return new Circle();
case RECTANGLE:
return new Rectangle();
case SQUARE:
return new Square();
default:
return null;
}
}
}
- Shape를 상속받은 각 형태의 객체를 선언하고, 실제 그 객체를 생성하여 전달하는 역할을 ShapeFactory에서 진행하게 한다.
public class FactoryPatternMain {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
// Get an object of Circle and call its draw method.
Shape shape1 = shapeFactory.getShape(ShapeType.CIRCLE);
// Call draw method of Circle
shape1.draw();
// Get an object of Rectangle and call its draw method.
Shape shape2 = shapeFactory.getShape(ShapeType.RECTANGLE);
// Call draw method of Rectangle
shape2.draw();
// Get an object of Square and call its draw method.
Shape shape3 = shapeFactory.getShape(ShapeType.SQUARE);
// Call draw method of circle
shape3.draw();
}
}
- 주어진 ShapeType에 맞추어 요청한 객체를 생성하여 제공한다.
Source
Sample Code는 여기에서 확인 가능합니다.
댓글남기기