Factory Method Pattern
생성의 템플릿 메소드 패턴
학습 목표
- 팩토리 메소드 패턴에서 템플릿 메소드 패턴이 사용됨을 안다.
- 팩토리 메소드 패턴에서의 구조와 구현의 분리를 이해하고 구조와 구현의 분리의 장점을 안다.
- 유연성 ! → 다른 아이템 생성할 때 Item과 Creator만 생성하면 다른 코드의 변화가 없음
기본 설계
예제
요구 사항
- 게임 아이템과 아이템 생성을 구현해주세요.
- 아이템을 생성하기 전에 데이터베이스에서 아이템 정보를 요청합니다.
- 아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위해 데이터베이스에 아이템 생성 정보를 남깁니다.
- 아이템을 생성하는 주체를 ItemCreator로 이름 짓습니다.
- 아이템은 item이라는 interface로 다룰 수 있도록 합니다.
- item은 use 함수를 기본 함수로 갖고 있습니다.
- 현재 아이템의 종류는 체력 회복, 물약, 마력 회복 물약이 있습니다.
Item.java
public interface Item {
void use();
}
ItemCreator.java
public abstract class ItemCreator {
//팩토리 메소드 -> 템플릿 메소드
public Item create() {
Item item;
//step1
requestItemsInfo();
//step2
item = createdItem();
//step3
createItemLog();
return item;
}
//아이템을 생성하기 전에 데이터베이스에서 아이템 정보를 요청
abstract protected void requestItemsInfo();
//아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위해 데이터베이스에 아이템 생성 기록을 남김
abstract protected void createItemLog();
//아이템을 생성하는 알고리즘
abstract protected Item createdItem();
}
HpPotion.java
public class HpPotion implements Item {
@Override
public void use() {
System.out.println("체력 회복!");
}
}
MpPotion.java
public class MpPotion implements Item {
@Override
public void use() {
System.out.println("마력 회복!");
}
}
HpCreator.java
public class HpCreator extends ItemCreator {
@Override
protected void requestItemsInfo() {
System.out.println("데이터베이스에서 체력 회복 물약의 정보를 가져옴");
}
@Override
protected void createItemLog() {
System.out.println("체력 회복 물약을 새로 생성함 " + new Date());
}
@Override
protected Item createdItem() {
return new HpPotion();
}
}
MpCreator.java
public class MpCreator extends ItemCreator {
@Override
protected void requestItemsInfo() {
System.out.println("데이터베이스에서 마력 회복 물약의 정보를 가져옴");
}
@Override
protected void createItemLog() {
System.out.println("마력 회복 물략을 새로 생성함 " + new Date());
}
@Override
protected Item createdItem() {
return new MpPotion();
}
}
Main.java
public class Main {
public static void main(String[] args) {
ItemCreator creator;
Item item;
creator = new HpCreator();
item = creator.create();
item.use();
creator = new MpCreator();
item = creator.create();
item.use();
// <결과>
// 데이터베이스에서 체력 회복 물약의 정보를 가져옴
// 체력 회복 물약을 새로 생성함 Sun Jul 19 15:47:50 KST 2020
// 체력 회복
// 데이터베이스에서 마력 회복 물약의 정보를 가져옴
// 마력 회복 물략을 새로 생성함 Sun Jul 19 15:47:50 KST 2020
// 마력 회복
}
}
www.inflearn.com/course/자바-디자인-패턴/dashboard
'Java > Design Pattern' 카테고리의 다른 글
[디자인 패턴] Strategy Pattern(전략 패턴, 스트레티지 패턴) (0) | 2020.07.20 |
---|---|
[디자인 패턴] Template Method Pattren(템플릿 메소드 패턴) (0) | 2020.07.19 |
댓글