01. 자바 팩토리 메소드 패턴 (JAVA Factory Method Pattern)

# 참고한 영상
자바 디자인 패턴 이해 - YouTube
Gof Design Pattern을 자바 언어로 설명한 강의. 의미 있고 쉬운 예제를 준비하려고 노력했습니다. '좋아요'/'구독' 부탁 드립니다.
www.youtube.com
# 설명
객체는 직접 생성하는 경우가 있고, 팩토리 메소드 패턴의 역할처럼
간접적으로 객체 생성 후 반환해주는 방식으로 생각해 볼 수 있다
객체 생성을 대신 수행해주는 공장이라고 생각하면 된다.
팩토리 메서드 패턴은 템플릿 메서드 패턴을 포함하고 있다
# 장점
생성 할 클래스를 미리 알지 못해도 팩토리 클래스가 객체 생성 담당
객체의 자료형이 하위클래스에 의해서 결정 -> 확장성 용이성
동일한 형태로 프로그래밍 가능
확장성 있는 전체 프로젝트 구성 가능
객체가 늘어날 때 마다 하위 클래스 재정의로 인한 불필요한 많은 클래스 생성 가능성
# 단점
# 사용 여부
# 사용 방법
# 구조

객체 생성 전 해야 할 작업들을 위한 패턴?
# 요구 사항
1. 게임 아이템과 아이템 생성을 구현해주세요.
- 아이템을 생성하기 전에 데이터 베이스에서 아이템 정보를 요청합니다
- 아이템 생성 후 아이템 복제 등의 불법을 방지하기 위해 데이터 베이스에 아이템 생성 정보를 남깁니다
2. 아이템을 생성하는 주체를 ItemCreator로 이름 짓습니다.
3. 아이템은 item 이라는 interface로 다룰 수 있도록 합니다.
- item 은 use 함수를 기본 함수로 갖고 있습니다
4. 현재 아이템의 종류는 체력 회복 물약, 마력 회복 물약이 있습니다.
# 변경 사항
1. 마나포션의 기록 데이터 베이스가 MySQL 에서 Oracle로 바뀌었다.
# 결과

# Interface
1
2
3
4
5
6
7
8
|
/** 아이템 */
public interface Item {
/** 아이템 사용 */
void use();
}
|
cs |
# Impl
HpPotion.java
1
2
3
4
5
6
7
8
9
10
11
|
/** 체력 회복 포션 */
public class HpPotion implements Item {
/** 아이템 사용 */
@Override
public void use() {
System.out.println("체력 회복!");
}
}
|
cs |
MpPotion.java
1
2
3
4
5
6
7
8
9
10
|
/** 마나 회복 포션 */
public class MpPotion implements Item {
/** 아이템 사용 */
@Override
public void use() {
System.out.println("마력 회복!");
}
}
|
cs |
# Concreator Class
AbstItemCreator.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
/** 추상 아이템 Factory Class */
public abstract class AbstItemCreator {
/** STEP 1 아이템을 생성하기 전에 데이터 베이스에서 아이템 정보를 요청합니다 */
protected abstract void requestItemsInfo();
/** STEP 2 아이템 생성 후 아이템 복제 등의 불법을 방지하기 위해 데이터 베이스에 아이템 생성 정보를 남깁니다 */
protected abstract void createItemLog();
/** STEP 3 아이템을 생성하는 알고리즘 */
protected abstract Item createItem();
/** (해당)아이템 생성 */
public Item create() {
// 여러 아이템을 담기 위한 인터페이스
Item item;
// STEP 1 DB 요청
requestItemsInfo();
// STEP 2 생성 된 Item 정보 DB 기록 (id, item_name, user_name, reg_date....)
createItemLog();
// STEP 3 아이템 생성 완료
item = createItem();
// 아이템 리턴
return item;
}
}
|
cs |
# Concreate Class (extend)
HpCreator.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/** 체력 회복 포션 아이템 Factory Class */
public class HpCreator extends AbstItemCreator {
/** STEP 1 */
@Override
protected void requestItemsInfo() {
System.out.println("MySQL 데이터베이스에서 회복 물약의 정보를 가져옵니다");
}
/** STEP 2 */
@Override
protected void createItemLog() {
System.out.println("체력 회복 물약을 새로 생성 했습니다 " + new Date());
}
/** STEP 3 */
@Override
protected Item createItem() {
return new HpPotion();
}
}
|
cs |
MpCreator.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
/** 마나 회복 포션 아이템 Factory Class */
public class MpCreator extends AbstItemCreator {
/** STEP 1 */
@Override
protected void requestItemsInfo() {
//System.out.println("MySQL 데이터베이스에서 회복 물약의 정보를 가져옵니다");
// 변경 사항
System.out.println("Oracle 데이터베이스에서 회복 물약의 정보를 가져옵니다");
}
/** STEP 2 */
@Override
protected void createItemLog() {
System.out.println("마력 회복 물약을 새로 생성 했습니다 " + new Date());
}
/** STEP 3 */
@Override
protected Item createItem() {
return new MpPotion();
}
}
|
cs |
# Client
Client.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class Client {
public static void main(String[] args) {
AbstItemCreator ic = new HpCreator();
Item item;
item = ic.create();
item.use();
System.out.println();
ic = new MpCreator();
item = ic.create();
item.use();
}
}
|
cs |
# Diagram

# 추가 참고 (출처는 밑)

'92. 디자인 패턴 > 생성(Creational)' 카테고리의 다른 글
03. 자바 프로토타입 패턴 (JAVA Prototype Pattern) (0) | 2020.06.22 |
---|---|
02. 자바 싱글톤 패턴 (JAVA Singleton Pattern) (0) | 2020.06.22 |
댓글
이 글 공유하기
다른 글
-
03. 자바 프로토타입 패턴 (JAVA Prototype Pattern)
03. 자바 프로토타입 패턴 (JAVA Prototype Pattern)
2020.06.22 -
02. 자바 싱글톤 패턴 (JAVA Singleton Pattern)
02. 자바 싱글톤 패턴 (JAVA Singleton Pattern)
2020.06.22
댓글을 사용할 수 없습니다.