디자인 모델 학습 노트 의 간단 한 공장 모델

4141 단어 디자인 모드
최근 에 을 보면 서 디자인 모델 을 잘 배우 고 자신 이 공부 하 는 과정 에서 느 낀 점 과 궁금 한 점 을 쓰 려 고 합 니 다. 초보 자 에 게 도움 을 주 고 제 부족 함 과 잘못 을 지적 해 주 셔 서 감사합니다.
단순 공장 모드:
    간단 한 공장 모델 은 디자인 모델 에서 가장 간단 하지만 응용 은 가장 광범 위 한 모델 이 라 고 할 수 있다. 우 리 는 마음대로 예 를 들 어 그의 장점 을 살 펴 보 자.
그런데 우리 집 은 고양이, 강아지, 오 트 만 같은 작은 동물 을 많이 키 웠 어 요. 고양 이 는 물고 기 를 먹고 개 는 고 기 를 먹고 오 트 만 은 작은 괴물 을 먹 었 어 요.지금 우 리 는 동물 한 마 리 를 마음대로 잡 아 내 는 것 이 무엇 인지 알 고 싶 습 니 다. 모델 을 설계 하지 않 으 면 이렇게 이 루어 집 니 다.


public class Cat {
	public Cat() {}

	public void eat() {
		System.out.println("   ");
	}
}

public class Dog {
		
	public Dog() {}
	
	public void eat() {
		System.out.println("   ");
	}
}

public class Ultraman {
	public Ultraman () {}
	
	public void eat() {
		System.out.println("       ");
	}
}
public class MainClass {
        /**
	 *         
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String animalName = null;

		System.out.println("Please enter the name of the animal:");
		animalName = br.readLine();
		
		if("Dog".equals(animalName)) {
			Dog dog = new Dog();
			dog.eat();
		} else if("Cat".equals(animalName)) {
			Cat cat = new Cat();
			cat.eat();
		} else if("Ultraman".equals(animalName)) {
			Ultraman ulMan = new Ultraman();
			ulMan.eat();
		}
	}
}

이런 서법 의 단점:
1. 마침 우리 집 이 동물원 이 라면 수많은 if.. else 가 있 을 것 이다.
2. 만약 에 우리 가 작은 동물 들 이 무엇 을 먹 는 지 알 고 싶 을 뿐만 아니 라 동물 들 이 어떤 똥 을 싸 는 지 알 고 싶다 면 이 럴 때 모든 if.. else 에 똥 을 싸 는 방법 을 넣 어야 한다. 이런 중복 코드 는 동물 이 많 을 수록 작업량 이 많아 질 것 이다.
3. 모든 if.. else 의 동작 은 비슷 한 동작 입 니 다. 안에 동작 이 매우 많 을 때 대량의 코드 가 생 겨 유지 하기 가 쉽 지 않 습 니 다.
지금 우 리 는 간단 한 공장 방법 으로 코드 를 개선 합 니 다.

public interface Animal {
	public void eat();
}

public class Cat implements Animal{
	public Cat() {}

	public void eat() {
		System.out.println("   ");
	}
}
//         
...

/**
 *    ,      
 * @author link
 */
public class OperationFactory {
	public static Animal createAnimal(String animalName) {
		Animal animal = null;
		if("Dog".equals(animalName)) {
			animal = new Dog();
		} else if("Cat".equals(animalName)) {
			animal = new Cat();
		} else if("Ultraman".equals(animalName)) {
			animal = new Ultraman();
		}
		return animal;
	}
}

public class MainClass {
        /**
	 *         
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String animalName = null;

		System.out.println("Please enter the name of the animal:");
		animalName = br.readLine();
		
		//      ,            
		Animal animal = OperationFactory.createAnimal(animalName);
		//    “ ”   ,          、       
		animal.eat();
	}
}

MainClass 실행,
Please enter the name of the animal:
Ultraman
오 트 만 몬스터 먹 기
간단 한 공장 방법 을 사용 하 는 장점:
1. 우리 가 동물원 을 열 더 라 도 공장 류 에 해당 동물 의 초기 화 방법 을 추가 하면 됩 니 다. 반 사 를 사용 하여 초기 화 하면 모든 if.. else 를 제거 하여 코드 를 더욱 간결 하 게 할 수 있 습 니 다.더 중요 한 것 은 동물 을 아무리 늘 려 도 업무 코드 에 영향 을 주지 않 는 다 는 것 이다.
2. 우리 의 업무 코드 는 매우 간결 하고 매우 많 을 것 입 니 다. 또한 업무 코드 에서 각종 동물 의 eat () 방법 을 중복 호출 할 필요 가 없습니다. 동물 들 이 어떤 떡 을 싸 는 지 알 고 싶 더 라 도 업무 코드 에 코드 한 줄 만 추가 하면 됩 니 다. 일반 코드 가 if.. else 의 모든 판단 에 한 줄 씩 추가 해 야 하 는 것 이 아 닙 니 다.(현실 작업 에 서 는 수 십 줄 에서 백 줄 이 넘 는 것 일 수도 있다).
디자인 에 있어 간단 한 공장 방법 으로 코드 의 결합 도 를 낮 추고 변동 이 발생 할 가능성 이 가장 높 으 며 확 장 된 코드 를 추출 하여 업무 코드 의 간결 함 과 상대 적 안정성 을 확보 했다.

좋은 웹페이지 즐겨찾기