public class AnimalFactory {
//Factory로 원하는 클래스를 생성하기 위함
public static Animal create(String animalName) {
if (animalName.equals("")) {
System.out.println("생성 할 클래스가 없습니다");
}else if (animalName.equals("야옹이")) {
return new Cat();
}else if (animalName.equals("멍멍이")) {
return new Dog();
}else if (animalName.equals("황소")) {
return new Cow();
}
return null;
}
}
인터페이스
public interface Animal {
public void printDescript();
}
메인클래스
public class mainClass {
public static void main(String[] args) {
/*
Singleton Pattern
중심이 되는 데이터 관리 template(list, map)을 중심으로
어느 클래스에서나 접근이 용의하게 하기 위한 패턴
instance 한개의 의미.
Factory Pattern 공장 -> Object
원하는 클래스의 형태를 생성하기 위한 패턴
interface, class 동물
class 고양이, 멍멍이, 황소
Animal ani = new Cat();
*/
Animal ani1 = AnimalFactory.create("멍멍이");
Animal ani2 = AnimalFactory.create("야옹이");
Animal ani3 = AnimalFactory.create("황소");
//호출
ani1.printDescript();
ani2.printDescript();
ani3.printDescript();
//멍멍이입니다
//야옹이입니다
//황소입니다
((Dog)ani1).dogMethod();
//멍멍
List<Animal> list = new ArrayList<Animal>();
Animal ani = null;
//황소2마리, 야옹이1, 멍뭉이3
String aname[] = { "황소", "황소", "야옹이", "멍멍이", "멍멍이", "멍멍이"};
for (int i = 0; i < aname.length; i++) {
ani = AnimalFactory.create(aname[i]);
list.add(ani);
}
/* 위에 간단하게 다시 씀
ani = AnimalFactory.create("황소");
list.add(ani);
ani = AnimalFactory.create("황소");
list.add(ani);
ani = AnimalFactory.create("야옹이");
list.add(ani);
ani = AnimalFactory.create("멍멍이");
list.add(ani);
ani = AnimalFactory.create("멍멍이");
list.add(ani);
ani = AnimalFactory.create("멍멍이");
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();
}
//황소입니다
//음메
//황소입니다
//음메
//야옹이입니다
//야옹
//멍멍이입니다
//멍멍
//멍멍이입니다
//멍멍
//멍멍이입니다
//멍멍
}
}
}
강아지(오버라이딩)
public class Dog implements Animal {
@Override
public void printDescript() {
System.out.println("멍멍이입니다");
}
public void dogMethod() {
System.out.println("멍멍");
}
}
고양이(오버라이딩)
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("음메");
}
}