Notice
Recent Posts
Recent Comments
Link
drexqq
[Java, 자바] Factory Pattern(팩토리패턴) 본문
728x90
반응형
Java의 디자인패턴인 Factory Pattern에 대해서 알아보자.
간단히 말하면 팩토리 패턴은 객체 생성을 대신 해주는 곳이라고 생각하면 된다.
이름에서 유추할 수 있듯이 공장같은 역할을 해준다.
예제를 보면서 이해해보자.
package animal;
public interface Animal {
public void printDescript();
}
일단 Animal이라는 인터페이스를 생성해주었다.
package animal;
public class Cat implements Animal {
@Override
public void printDescript() {
System.out.println("고양이입니다.");
}
public void catMethod() {
System.out.println("야옹");
}
}
public class Cow implements Animal {
@Override
public void printDescript() {
System.out.println("소입니다.");
}
public void cowMethod() {
System.out.println("음메");
}
}
public class Dog implements Animal {
@Override
public void printDescript() {
System.out.println("강아지입니다");
}
public void dogMethod() {
System.out.println("멍멍");
}
}
그리고 Animal이라는 인터페이스를 implements 시킨 클래스 고양이, 강아지, 소를 만들어주었다.
이제 factory 클래스를 만들어보자.
package factory;
import animal.Animal;
import animal.Cat;
import animal.Dog;
import animal.Cow;
public class AnimalFactory {
public static Animal create(String AnimalName) {
if (AnimalName == "") {
System.out.println("생성할 클래스가 없습니다.");
}
if (AnimalName.equals("야옹이")) {
return new Cat();
}
if (AnimalName.equals("강아지")) {
return new Dog();
}
if (AnimalName.equals("소")) {
return new Cow();
}
return null;
}
}
위처럼 AnimalFactory라는 클래스 안에서 Animal형태의 값을 반환하는 static메서드인 create를 작성해주고 파라미터로 String 형태의 값을 받아온다.
그 뒤 조건문으로 파라미터의 갑을 비교해주며 Animal인터페이스에서 상속받은 클래스 3가지를 생성해 줄 수 있다.
package main;
import java.util.ArrayList;
import java.util.List;
import animal.Animal;
import animal.Cat;
import animal.Cow;
import animal.Dog;
import factory.AnimalFactory;
public class mainClass {
public static void main(String[] args) {
List<Animal> list = new ArrayList<Animal>();
Animal ani = null;
String aname[] = { "소", "소", "야옹이", "야옹이", "야옹이", "강아지", "강아지"};
for (int i = 0; i < aname.length; i++) {
ani = AnimalFactory.create(aname[i]);
list.add(ani);
}
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();
}
}
}
}
이제 메인함수에서 실행한 결과를 보자
소입니다.
음메
소입니다.
음메
고양이입니다.
야옹
고양이입니다.
야옹
고양이입니다.
야옹
강아지입니다
멍멍
강아지입니다
멍멍
위 결과처럼 String의 값을 차례로 넣어주니 해당하는 클래스의 생성자가 생성되는 것을 볼 수 있다.
728x90
반응형
'Back-End > Java' 카테고리의 다른 글
[Java, 자바] 소수 판별함수 (isPrime) (0) | 2021.06.18 |
---|---|
[Java, 자바] Observer (0) | 2020.06.17 |
[Java, 자바] Singleton(싱글톤) (0) | 2020.06.10 |
[Java, 자바] 스택(Stack), 큐(Queue) (0) | 2020.06.10 |
[Java, 자바] HashMap, TreeMap (0) | 2020.06.10 |
Comments