728x90
반응형
Factory Method Pattern이란?
객체를 만들어내는 부분을 서브 클래스에 위임하는 패턴.
super class와 여러 개의 sub class가 있는 상황에서 input이 발생하면 하나의 sub class를 반환해야 할 때 사용된다. 쉽게 말해 new를 사용해 호출하는 부분을 서브 클래스에 위임하는 ㄱ
Super class
factory pattern에서 super class는 interface, abstract class 또는 일반적인 class가 될 수 있다. 예제에서는 출력을 보기 위해 toString() method를 오버라이드 한다.
public abstract class Product
{
public abstract String getName();
public abstract int getPrice();
@Override
public String toString()
{
return "product name : " + getName() + ", price : " + getPrice();
}
}
Sub class
Product class를 상속받은 Computer와 Ticket class를 구현한다.
public class Computer extends Product {
private String name;
private int price;
public Computer (String name, int price) {
this.name = name;
this.price = price;
}
@Override
public String getName() {
return this.name;
}
@Override
public int getPrice() {
return this.price;
}
public void toStrig () {
System.out.println("항목 :: " + this.name + ", 가격 :: "+ this.price);
}
}
public class Ticket extends Product {
private String name;
private int price;
public Ticket (String name, int price) {
this.name = name;
this.price = price;
}
@Override
public String getName() {
return this.name;
}
@Override
public int getPrice () {
return this.price;
}
public void toStrig () {
System.out.println("항목 :: " + this.name + ", 가격 :: "+ this.price);
}
}
Factory class
public class ProductFactory {
public static Product getProduct(String type, String name, int price) {
if ( "ticket".equals(type) )
return new Ticket(name, price);
else if ( "computer".equals(type) )
return new Computer(name, price);
return null;
}
}
factory class를 static으로 선언하여 singleton 유지
input 파라메터에 의해 sub class가 생성되어 리턴된다.
public class main {
public static void main(String[] args) {
Product t1 = ProductFactory.getProduct("ticket", "한국여행", 300000);
Product c1 = ProductFactory.getProduct("computer", "pc", 1500000);
System.out.println(t1.toString());
System.out.println(c1.toString());
}
}
정리
Factory Pattern은 인스턴스 생성 부분을 분리하여 클래스간의 결합도를 낮추기 위해 사용한다. 결합도는 클래스간에 얼마나 영향이 큰지에 대한 것이다.
Reference
https://blog.seotory.com/post/2016/08/java-factory-pattern
728x90
반응형
'프로그래밍 > 디자인 패턴(프로그래밍)' 카테고리의 다른 글
[Design Pattern]Prototype Pattern이란? (0) | 2019.01.17 |
---|---|
[Design Pattern]Builder Pattern이란? (0) | 2019.01.17 |
[Design Pattern]Abstract Factory Pattern이란? (0) | 2019.01.17 |
[Design Pattern]Singleton이란? (0) | 2019.01.17 |
[프로그래밍]Design Pattern Outline, 디자인 패턴이란? (0) | 2019.01.16 |
댓글