본문 바로가기

카테고리 없음

팩토리// 동물농장

 

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("음메");
	}
}