From 054954380bbce54d90667c5411e77ea7230119e1 Mon Sep 17 00:00:00 2001 From: kim Date: Sat, 9 Jan 2021 15:20:13 +0900 Subject: [PATCH] Factory Method pattern --- .../src/FactoryMethod/FactoryMethod | 11 +++++++++ design-pattern/src/FactoryMethod/Main.java | 23 +++++++++++++++++++ .../src/FactoryMethod/concrete/HpCreator.java | 23 +++++++++++++++++++ .../src/FactoryMethod/concrete/HpPotion.java | 10 ++++++++ .../src/FactoryMethod/concrete/MpCreator.java | 23 +++++++++++++++++++ .../src/FactoryMethod/concrete/MpPotion.java | 10 ++++++++ .../src/FactoryMethod/framework/Item.java | 6 +++++ .../FactoryMethod/framework/ItemCreator.java | 21 +++++++++++++++++ 8 files changed, 127 insertions(+) create mode 100644 design-pattern/src/FactoryMethod/FactoryMethod create mode 100644 design-pattern/src/FactoryMethod/Main.java create mode 100644 design-pattern/src/FactoryMethod/concrete/HpCreator.java create mode 100644 design-pattern/src/FactoryMethod/concrete/HpPotion.java create mode 100644 design-pattern/src/FactoryMethod/concrete/MpCreator.java create mode 100644 design-pattern/src/FactoryMethod/concrete/MpPotion.java create mode 100644 design-pattern/src/FactoryMethod/framework/Item.java create mode 100644 design-pattern/src/FactoryMethod/framework/ItemCreator.java diff --git a/design-pattern/src/FactoryMethod/FactoryMethod b/design-pattern/src/FactoryMethod/FactoryMethod new file mode 100644 index 00000000..5cba1ec2 --- /dev/null +++ b/design-pattern/src/FactoryMethod/FactoryMethod @@ -0,0 +1,11 @@ +Factory Method pattern + - 템플릿 메소드 패턴 사용 + +요구사항 + - 게임 아이템과 아이템 생성 구현 + - 아이템을 생성하기 전에 데이터베이스에서 아이템 정보를 요청 + - 아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위해 데이터베이스에 아이템 생성 정보를 남긴다. + - 아이템을 생성하는 주체를 ItemCreator + - 아이템은 item 이라는 interface + - item 은 use 함수를 기본 함수로 갖고 있다. + - 현재 아이템의 종류는 체력 회복 물약, 마력 회복 물약이 있다. \ No newline at end of file diff --git a/design-pattern/src/FactoryMethod/Main.java b/design-pattern/src/FactoryMethod/Main.java new file mode 100644 index 00000000..06090859 --- /dev/null +++ b/design-pattern/src/FactoryMethod/Main.java @@ -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(); + } +} diff --git a/design-pattern/src/FactoryMethod/concrete/HpCreator.java b/design-pattern/src/FactoryMethod/concrete/HpCreator.java new file mode 100644 index 00000000..ee30795c --- /dev/null +++ b/design-pattern/src/FactoryMethod/concrete/HpCreator.java @@ -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(); + } +} diff --git a/design-pattern/src/FactoryMethod/concrete/HpPotion.java b/design-pattern/src/FactoryMethod/concrete/HpPotion.java new file mode 100644 index 00000000..6fee6166 --- /dev/null +++ b/design-pattern/src/FactoryMethod/concrete/HpPotion.java @@ -0,0 +1,10 @@ +package FactoryMethod.concrete; + +import FactoryMethod.framework.Item; + +public class HpPotion implements Item { + @Override + public void use() { + System.out.println("체력 회복"); + } +} diff --git a/design-pattern/src/FactoryMethod/concrete/MpCreator.java b/design-pattern/src/FactoryMethod/concrete/MpCreator.java new file mode 100644 index 00000000..2b464eba --- /dev/null +++ b/design-pattern/src/FactoryMethod/concrete/MpCreator.java @@ -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(); + } +} diff --git a/design-pattern/src/FactoryMethod/concrete/MpPotion.java b/design-pattern/src/FactoryMethod/concrete/MpPotion.java new file mode 100644 index 00000000..96345bd3 --- /dev/null +++ b/design-pattern/src/FactoryMethod/concrete/MpPotion.java @@ -0,0 +1,10 @@ +package FactoryMethod.concrete; + +import FactoryMethod.framework.Item; + +public class MpPotion implements Item { + @Override + public void use() { + System.out.println("마력 회복"); + } +} diff --git a/design-pattern/src/FactoryMethod/framework/Item.java b/design-pattern/src/FactoryMethod/framework/Item.java new file mode 100644 index 00000000..19edbda6 --- /dev/null +++ b/design-pattern/src/FactoryMethod/framework/Item.java @@ -0,0 +1,6 @@ +package FactoryMethod.framework; + +public interface Item { + + void use(); +} diff --git a/design-pattern/src/FactoryMethod/framework/ItemCreator.java b/design-pattern/src/FactoryMethod/framework/ItemCreator.java new file mode 100644 index 00000000..a6309857 --- /dev/null +++ b/design-pattern/src/FactoryMethod/framework/ItemCreator.java @@ -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(); +}