
팩토리 메서드 패턴에는 템플릿 메서드 패턴이 사용된다.
해당 내용을 코드를 통해서 알아보자!
구현
요구사항
게임과 아이템과 아이템 생성을 구현
- 아이템을 생성하기 전에 DB에서 아이템 정보를 요청
- 아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위해 DB에 아이템 생성 정보를 남긴다.
아이템을 생성하는 주체는 ItemCreator이다.
아이템은 item이라는 interface로 선언한다.
- item은 use 메서드를 기본적으로 가지고 있다.
현재 아이템의 종류는 체력 회복 물약, 마력 회복 물약이 존재한다.
1. item 인터페이스 생성 - use() 메서드
public interface Item {
    public void use();
}2. ItemCreator 추상 클래스 생성 - 템플릿 메서드 패턴
public abstract class ItemCreator {
    public Item create() {
        Item item;
        //Step01
        requestItemInfo();
        //Step02
        item = createItem();
        //Step03
        createItemLog();
        return item;
    }
    //아이템을 생성하기 전에 데이터 베이스에서 아이템 정보를 요청합니다.
    abstract protected void requestItemInfo();
    //아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위해 데이터 베이스에 아이템 생성
    abstract protected void createItemLog();
    //아이템을 생성하는 알고리즘
    abstract protected Item createItem();
    
}특정한 호출 순서가 있기 때문에 템플릿 메서드 패턴을 활용한다. (step01 ~ step03)
https://jwdeveloper.tistory.com/226?category=862052
(DesignPattern) 템플릿 메서드 패턴
템플릿 메서드 패턴이란? 알고리즘 구조를 메서드에 정의하고 하위 클래스에서 알고리즘 구조의 변경 없이 해당 알고리즘을 재 정의하는 패턴 When? 구현하려는 알고리즘이 일정한 프로세스가 있을 때 구현하려는..
jwdeveloper.tistory.com
3. 구현 클래스 생성
1) 이전에 생성하였던 item 인터페이스를 implements 하는 구체 클래스를 작성한다. - 요구사항의 체력 회복 물약, 마력 회복 물약
public class HpPotion implements Item {
    @Override
    public void use() {
        System.out.println("체력 회복!");
    }
}마력 회복 물약은 위와 상응하게 구현
2) 위의 포션을 사용하기 위한 Creator가 필요 - ItemCreator 추상 클래스를 상속해서 구현
public class HpCreator extends ItemCreator {
    @Override
    protected void requestItemInfo() {
        System.out.println("데이터 베이스에서 체력 회복 물약의 터정보를 가져옵니다.");
    }
    @Override
    protected void createItemLog() {
        System.out.println("체력 회복 물약을 새로 생성 했습니다."+new Date());
    }
    @Override
    protected Item createItem() {
        return new HpPotion();
    }
}마력 회복 물약은 위와 상응하게 구현
4. Main 함수 생성
public class Main {
    public static void main(String[] args) {
        Item item;
        ItemCreator itemCreator;
        itemCreator = new HpCreator();
        item = itemCreator.create();
        item.use();
        itemCreator = new MpCreator();
        item = itemCreator.create();
        item.use();
    }
}
정리
- 이전에 ItemCreator 추상 클래스의 create 메서드에서 단계별로 차례대로 호출해주는 방식으로 구현하였다. 이를 펙토리 메서드라고 부른다.
- creator와 item에 대한 구현이 각각 분리되었음을 보았다. 이를 통해서 구조와 구현의 분리에 대해 알 수 있다.
팩토리 메서드 패턴은 템플릿 메서드 패턴의 응용 버전으로
템플릿 메서드 패턴과 같이 일정한 호출에 대한 순서가 존재하며 인스턴스의 생성을 하위 클래스에게 위임한다는 특징을 가진다.
Code Link
https://github.com/mike6321/PURE_JAVA/tree/master/EffectiveStudy
mike6321/PURE_JAVA
Contribute to mike6321/PURE_JAVA development by creating an account on GitHub.
github.com
References
'CS > DesignPattern' 카테고리의 다른 글
| (DesignPattern) 프로토타입 패턴 (0) | 2020.05.04 | 
|---|---|
| (DesignPattern) 싱글턴 패턴 (0) | 2020.05.02 | 
| (DesignPattern) 어댑터 패턴 (0) | 2020.04.21 | 
| (DesignPattern) 템플릿 메서드 패턴 (0) | 2020.04.20 | 
| (DesignPattern) 전략 패턴 (0) | 2020.04.20 | 
 
										
									 
										
									 
										
									