Factory Method pattern
This commit is contained in:
11
design-pattern/src/FactoryMethod/FactoryMethod
Normal file
11
design-pattern/src/FactoryMethod/FactoryMethod
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Factory Method pattern
|
||||||
|
- 템플릿 메소드 패턴 사용
|
||||||
|
|
||||||
|
요구사항
|
||||||
|
- 게임 아이템과 아이템 생성 구현
|
||||||
|
- 아이템을 생성하기 전에 데이터베이스에서 아이템 정보를 요청
|
||||||
|
- 아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위해 데이터베이스에 아이템 생성 정보를 남긴다.
|
||||||
|
- 아이템을 생성하는 주체를 ItemCreator
|
||||||
|
- 아이템은 item 이라는 interface
|
||||||
|
- item 은 use 함수를 기본 함수로 갖고 있다.
|
||||||
|
- 현재 아이템의 종류는 체력 회복 물약, 마력 회복 물약이 있다.
|
||||||
23
design-pattern/src/FactoryMethod/Main.java
Normal file
23
design-pattern/src/FactoryMethod/Main.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
23
design-pattern/src/FactoryMethod/concrete/HpCreator.java
Normal file
23
design-pattern/src/FactoryMethod/concrete/HpCreator.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
10
design-pattern/src/FactoryMethod/concrete/HpPotion.java
Normal file
10
design-pattern/src/FactoryMethod/concrete/HpPotion.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package FactoryMethod.concrete;
|
||||||
|
|
||||||
|
import FactoryMethod.framework.Item;
|
||||||
|
|
||||||
|
public class HpPotion implements Item {
|
||||||
|
@Override
|
||||||
|
public void use() {
|
||||||
|
System.out.println("체력 회복");
|
||||||
|
}
|
||||||
|
}
|
||||||
23
design-pattern/src/FactoryMethod/concrete/MpCreator.java
Normal file
23
design-pattern/src/FactoryMethod/concrete/MpCreator.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
10
design-pattern/src/FactoryMethod/concrete/MpPotion.java
Normal file
10
design-pattern/src/FactoryMethod/concrete/MpPotion.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package FactoryMethod.concrete;
|
||||||
|
|
||||||
|
import FactoryMethod.framework.Item;
|
||||||
|
|
||||||
|
public class MpPotion implements Item {
|
||||||
|
@Override
|
||||||
|
public void use() {
|
||||||
|
System.out.println("마력 회복");
|
||||||
|
}
|
||||||
|
}
|
||||||
6
design-pattern/src/FactoryMethod/framework/Item.java
Normal file
6
design-pattern/src/FactoryMethod/framework/Item.java
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
package FactoryMethod.framework;
|
||||||
|
|
||||||
|
public interface Item {
|
||||||
|
|
||||||
|
void use();
|
||||||
|
}
|
||||||
21
design-pattern/src/FactoryMethod/framework/ItemCreator.java
Normal file
21
design-pattern/src/FactoryMethod/framework/ItemCreator.java
Normal 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();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user