記錄

Factory Method Pattern(팩토리 메소드 패턴) 본문

IT_Fundamental/디자인 패턴

Factory Method Pattern(팩토리 메소드 패턴)

surhommejk 2017. 11. 19. 11:35


Factory Method Pattern(팩토리 메소드)



Factory Method Pattern(팩토리 메소드 패턴)은 템플릿 메소드 패턴을 이용한 패턴으로 구조와 구현을 분리함으로써 코드의 유연성을 얻고자 하는 패턴이다. 템플릿 메소드 패턴에서 한 단계 발전한 형태라고 보면 된다. 추상 클래스 혹은 인터페이스를 통해서 구조만 선언해두고 이를 상속하는 클래스를 통해서 각각 Override한 후 Main에서 사용하는 방식이다.



public interface Item {
    public void use();
}


public class HPportion implements Item {

    public void use() {

        System.out.println("HP 포션을 사용합니다");
    }

}


public class MPportion implements Item {

    public void use() {
        System.out.println("MP portion을 사용합니다");
    }

}


public abstract class ItemCreator {

    protected void CreatItem() {

        GetItemInfo();
        SelectImage();
        PutinCharactorItemlist();

    }

    abstract void GetItemInfo();

    abstract void SelectImage();

    abstract void PutinCharactorItemlist();

}


public class HPcreator extends ItemCreator {

    void GetItemInfo() {
        System.out.println("HP portion의 정보를 가져옵니다");
    }

    void SelectImage() {
        System.out.println("HP portion의 이미지를 불러옵니다");
    }

    void PutinCharactorItemlist() {
        System.out.println("캐릭터의 아이템 창에 HP portion을 넣습니다");
    }

}


public class MPcreator extends ItemCreator {

    void GetItemInfo() {
        System.out.println("MP portion의 정보를 가져옵니다");
    }

    void SelectImage() {
        System.out.println("MP portion의 이미지를 불러옵니다");
    }

    void PutinCharactorItemlist() {
        System.out.println("캐릭터의 아이템 창에 MP portion을 넣습니다");
    }

}


public class Main {

    public static void main(String[] args) {

        Item item = null;
        ItemCreator creator = null;

        item = new HPportion();
        creator = new HPcreator();
        item.use();
        creator.CreatItem();

        item = new MPportion();
        creator = new MPcreator();
        item.use();
        creator.CreatItem();

    }

}



유지보수가 편하다는 것이 장점이다. 나중에 추가해야 할 Item이 생기면 Item 을 상속하는 클래스를 만들면 되고 Item을 만들때 필요한 절차가 현재 3개에서 늘어나거나 변화가 필요하다면 ItemCreator를 수정하면 된다.


간단히 정리하자면 Item, ItemCreator라는 구조를 만들고, 내부적으로는 템플릿 메소드를 활용해서 이를 구현하였다. 그리고 이를 통해 Main에서 손쉽게 사용하고 있으며 차후 유지, 보수가 필요하다면 Main을 건들 필요가 없이 템플릿 메소드의 클래스 내용만 변경하면 된다.

Comments