본문 바로가기
Development/DesignPatten

[디자인패턴] DesignPattern03 - Factory Method

by 푸민 2016. 8. 11.
반응형


안녕하세요 푸민입니다!



1. 개요


디자인 패턴중에서 우리가 정말 많이 사용하는 패턴중 하나인 팩토리 패턴에 대해서 한번 배워보겠습니다.

솔찍히 우리가 개발에 많이 사용하는 것은 주로 싱글톤 정도이죠. 팩토리 같은 경우는 주로 프레임워크 단에서 개발이 되어 있는것을 우리가 가져다 사용합니다.


자 그래서 팩토리가 무엇이냐하면, 간단합니다. 팩토리는 말그대로 공장입니다. 공장의 제품을 만드는 액션들을 묶어서 추상화한 다음에 실제로 지어지는 공장에서는 해당 추상 팩토리를 가져와서 그 공장에서 필요한 제품들을 만들수 있게 해줍니다.




2. 구현 방법


- 먼저 구현하고자 하는 제품공장추상 클래스를 설계합니다.


- 공장 추상클래스에서는 해당 제품을 생성할 수 있는 추상 메소드를 만듭니다.


- 실제 내가 만들고자하는 아자제품 클래스제품 추상 클래스를 적용합니다.


- 공장 추상 클래스를 받은 아자공장 클래스에서 공장 추상 클래스제품 생성이라는 추상 메소드를 아자제이 만들어 지도록 구현합니다.


- 필요한 부분에서 아자공장 클래스를 불러와서 아자제품을 생성해줍니다.



3. 예제

예약어 객체 인터페이스 변수및문자열

interface Pizza {

    public String getPrice();

}


interface PizzaMaster {

    public Pizza makePizza();


class PotatoPizza implements Pizza{

    public String getPrice(){

        return "This is Potato Pizza!! Its 6,000 won."

    }


class PotatoPizzaMaster implements PizzaMaster{

    public Pizza makePizza(){

        return new PotatoPizza();

    }

}


class CheesePizza implements Pizza{

    public String getPrice(){

        return "This CheesePizza!! Its 5,500 won."

    }


class CheesePizzaMaster implements PizzaMaster{

    public Pizza makePizza(){

        return new CheesePizza();

    }

}


class Kitchen {


    private PotatoPizzaMaster master1;

    private CheesePizzaMaster master2;


    public void main(){

        master1 = new PotatoPizzaMaster();

        master2 = new CheesePizzaMaster();


        order(new String[]{"potato","cheese","potato"});

    }


    public void order(String[] orderList){

        for(String orderName : orderList){

            if(orderName.equals("potato")){

                master1.makePizza().getPrice();

            }

            else if(orderName.equals("cheese")){

                master2.makePizza().getPrice();

            }

        }

    }

}



4. 예제 설명


- 먼저 피자와 피자마스터 추상 클래스를 만든다. 피자는 가격정보를 가져올수 있는 메소드가 있고, 피자마스터는 피자를 만드는 메소드가 있다.


- 각 포테이토피자와 치즈피자를 피자클래스로 구현하여 만들고, 각각 피자 마스터 클래스를 만들어준다. 각 피자의 가격정보 메소드에서는 해당 피자에 맞는 정보와 가격을 표시해준다. 각 피자마스터는 자기가 전공한 피자를 만들수 있다.


- 주방에서 포테이토피자마스터와 치즈피자마스터가 각각 존재하고, 주문이 들어오면 자신의 전공 피자를 만들고 가격정보를 표시한다.



실제 팩토리를 사용해야되는 정도의 규모나 설계가 된다면 상당히 큰 규모일거라 판단이 됩니다. 설계시에 잘 고려하여 만들길 바래요!!


위키 : https://ko.wikipedia.org/wiki/팩토리_메서드_패턴


제타위키 : http://zetawiki.com/wiki/팩토리_메소드_패턴



반응형

댓글