Factory Method pattern

This commit is contained in:
kim
2021-01-09 15:20:13 +09:00
parent 9a3ccd73eb
commit 054954380b
8 changed files with 127 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
Factory Method pattern
- 템플릿 메소드 패턴 사용
요구사항
- 게임 아이템과 아이템 생성 구현
- 아이템을 생성하기 전에 데이터베이스에서 아이템 정보를 요청
- 아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위해 데이터베이스에 아이템 생성 정보를 남긴다.
- 아이템을 생성하는 주체를 ItemCreator
- 아이템은 item 이라는 interface
- item 은 use 함수를 기본 함수로 갖고 있다.
- 현재 아이템의 종류는 체력 회복 물약, 마력 회복 물약이 있다.

View File

@@ -0,0 +1,23 @@
package FactoryMethod;
import FactoryMethod.concrete.HpCreator;
import FactoryMethod.concrete.MpCreator;
import FactoryMethod.framework.Item;
import FactoryMethod.framework.ItemCreator;
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();
}
}

View File

@@ -0,0 +1,23 @@
package FactoryMethod.concrete;
import FactoryMethod.framework.Item;
import FactoryMethod.framework.ItemCreator;
import java.time.LocalDateTime;
public class HpCreator extends ItemCreator {
@Override
protected void requestItemsInfo() {
System.out.println("데이터베이스에서 체력 회복 물약의 정보 조회");
}
@Override
protected void createItemLog() {
System.out.println("체력 회복 물약을 생성 : " + LocalDateTime.now());
}
@Override
protected Item createItem() {
return new HpPotion();
}
}

View File

@@ -0,0 +1,10 @@
package FactoryMethod.concrete;
import FactoryMethod.framework.Item;
public class HpPotion implements Item {
@Override
public void use() {
System.out.println("체력 회복");
}
}

View File

@@ -0,0 +1,23 @@
package FactoryMethod.concrete;
import FactoryMethod.framework.Item;
import FactoryMethod.framework.ItemCreator;
import java.time.LocalDateTime;
public class MpCreator extends ItemCreator {
@Override
protected void requestItemsInfo() {
System.out.println("데이터베이스에서 마력 회복 물약의 정보 조회");
}
@Override
protected void createItemLog() {
System.out.println("마력 회복 물약을 생성 : " + LocalDateTime.now());
}
@Override
protected Item createItem() {
return new MpPotion();
}
}

View File

@@ -0,0 +1,10 @@
package FactoryMethod.concrete;
import FactoryMethod.framework.Item;
public class MpPotion implements Item {
@Override
public void use() {
System.out.println("마력 회복");
}
}

View File

@@ -0,0 +1,6 @@
package FactoryMethod.framework;
public interface Item {
void use();
}

View File

@@ -0,0 +1,21 @@
package FactoryMethod.framework;
public abstract class ItemCreator {
public Item create() {
Item item;
requestItemsInfo();
item = createItem();
createItemLog();
return item;
}
// 아이템을 생성하기 전에 데이터베이스에서 아이템 정보를 요청
abstract protected void requestItemsInfo();
// 아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위해 데이터베이스에 아이템 생성 정보를 남긴다.
abstract protected void createItemLog();
// 아이템을 생성하는 알고리즘
abstract protected Item createItem();
}