본문 바로가기
프로그래밍/디자인 패턴(프로그래밍)

[Design Pattern]Factory Method Pattern이란?

by 그래도동 2019. 1. 17.
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
반응형

댓글