Daily coding
Java Basic : day 13 - Factory Pattern 팩토리패턴 본문
Factory Pattern
- Singleton Pattern
: 중심이 되는 데이터 관리 template(list, map)을 중심으로
어디서나 접근이 용이하게 하기 위한 패턴
instance는 한 개
- Factory pattern
: 원하는 클래스의 형태를 생성하기 용이한 패턴.
게임 프로그래밍에 많이 사용
팩토리 메소드 패턴 : 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를
만들지는 서브클래스에서 결정하게 만든다. 즉 팩토리 메소드 패턴을 이용하면
클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것.
추상 팩토리 패턴 : 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성.
( 출처: https://jusungpark.tistory.com/14 [정리정리정리] )
< 예시 >
interface, class 동물
class 고양이, 멍멍이, 황소
Animal a = new Cat();
// 구현하려는 메소드를 선언한 인터페이스
public interface Animal {
public void printDescript();
}
// 팩토리에서 생산할 클래스1
public class Cat implements Animal {
@Override
public void printDescript() {
System.out.println("야옹이 입니다.");
}
public void catMethod() {
System.out.println("야옹 야옹");
}
}
// 팩토리에서 생산할 클래스2
public class Cow implements Animal{
@Override
public void printDescript() {
System.out.println("황소 입니다");
}
public void cowMethod() {
System.out.println("음머우");
}
}
// 팩토리에서 생산할 클래스3
public class Dog implements Animal{
@Override
public void printDescript() {
System.out.println("멍멍이 입니다.");
}
public void dogMethod() {
System.out.println("멍멍멍");
}
}
// 공장클래스 (실제 패턴이 만들어지는 곳)
public class AnimalFactory {
public static Animal crate(String animalName) {
if(animalName.equals("")) {
System.out.println("생성할 클래스가 없습니다.");
}
if(animalName.equals("야옹이")) {
return new Cat();
}else if(animalName.equals("멍멍이")) {
return new Dog();
}else if( animalName.equals("황소")) {
return new Cow();
}
return null;
}
}
// main 클래스
* 공장에서 클래스 찍어내기
Animal ani1 = AnimalFactory.crate("멍멍이");
ani1.printDescript();
ani1 = AnimalFactory.crate("야옹이");
ani1.printDescript();
ani1 = AnimalFactory.crate("황소");
ani1.printDescript();
// 리스트로 만들어서 관리 가능
List list = new ArrayList();
ani1 = AnimalFactory.crate("멍멍이");
list.add(ani1);
ani1 = AnimalFactory.crate("야옹이");
list.add(ani1);
ani1 = AnimalFactory.crate("황소");
list.add(ani1);
for (int i = 0; i < list.size(); i++) {
Animal a = list.get(i);
a.printDescript();
// 인스턴스의 타입에 따라 다른 메소드 결과 출력하기
if(a instanceof Cat) {
((Cat)a).catMethod();
}
else if(a instanceof Dog) {
((Dog)a).dogMethod();
}
else if(a instanceof Cow) {
((Cow)a).cowMethod();
}
}
}
}
'Language > Java_basic' 카테고리의 다른 글
Java Basic : day 14 - AWT & SWING 1 (0) | 2019.12.08 |
---|---|
Java Basic : day 13 - Observer Pattern 옵저버 패턴 (0) | 2019.12.04 |
Java Basic : day 13 - Calendar 캘린더 클래스 (0) | 2019.12.04 |
Java Basic : day 12 - Example01: Baseball 선수정보 입력(HashMap, TreeMap사용) 버전 2 (0) | 2019.12.04 |
Java Basic : day 12 - Singleton 싱글턴 패턴 (0) | 2019.12.04 |