프로그래밍/디자인 패턴(프로그래밍)

[Design Pattern]Factory Method Pattern이란?

그래도동 2019. 1. 17. 14:58
728x90
반응형
SMALL

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
반응형
LIST