공장 방법 모델 은 어떻게 간단 한 작업 방법 중의 부족 을 해결 합 니까?

을 보 았 을 때 이해 상의 문 제 를 발견 했다.공장 방법 모델 은 간단 한 공장 방법의 부족 을 해결 할 수 있 지만 나의 이 해 는 공장 방법 모델 이 원래 의 문 제 를 클 라 이언 트 에 게 던 져 서 진정 으로 해결 하지 못 한 것 이다.
 
간단 한 공장 모델 의 예제 코드 를 먼저 보 세 요.
 
class Factory{
	static Product createProduct(String type) {
		if(type.equalsIgnoreCase("apple")) {
			return new AppleProduct();
		}else if(type.equalsIgnoreCase("grape")) {
			return new GrapeProduct();
		}else {
			throw new IllegalArgumentException("Not type corresponding");
		}
	}
}

class Client_SimpleFactoryMethod {
	public static void main(String[] args) {
		String type = "grape";
		
		Product p = Factory.createProduct(type);
	}
}

interface Product{}

class AppleProduct implements Product{}
class GrapeProduct implements Product{}

 
신제품 이 있 을 때 Factory 류 에서 createProduct 방법 은 신제품 류 의 가입 을 포함 하여 상응 하 게 조정 해 야 한 다 는 단점 이 있다.어떤 제품 류 바나나 제품 을 새로 추 가 했 습 니까?우 리 는 createProduct 방법 에 가 지 를 새로 추가 해 야 합 니 다.
   else if(type.equalsIgnoreCase("banana")) {
return new BananaProduct();
}
  이렇게 하 는 것 은 좋 지 않다.왜냐하면 이런 처 리 는 개폐 원칙 에 위배 되 기 때문이다.
 
  이 문 제 를 해결 하기 위해 서 는 공장 방법 모델 을 도입 하면 된다 고 책 에서 말 했다. 
 
  그래서 각 제품 류 에 대응 하 는 공장 을 새로 추가 했다.
interface ProduectFactory{
	Product createProduct();
}


class AppleProduectFactory implements ProduectFactory{

	public Product createProduct() {
		
		return new AppleProduct();
	}
}
class GrapeProduectFactory implements ProduectFactory{
	public Product createProduct() {
		
		return new GrapeProduct();
	}
}


class Client_FactoryMethod {
	public static void main(String[] args) {
		String type = "grape";
		
		ProduectFactory produectFactory=null;
		
		if(type.equalsIgnoreCase("apple")) {
			produectFactory = new AppleProduectFactory();
		}else if(type.equalsIgnoreCase("grape")) {
			produectFactory = new GrapeProduectFactory();
		}
			
		Product p = produectFactory.createProduct();
	}
}

 
위의 간단 한 공장 방법 에 비해 위의 Client 가 다르다.Simple Factory Method 의 p 생 성 은 Factory 류 의 createProduct 방법 으로 type 종류 에 따라 구체 적 으로 어떤 제품 을 생 성 하 는 지 판단 합 니 다(직접 생 성).클 라 이언 트Factory Method 의 main 에서 type 에 따라 하 나 를 생 성 합 니 다.
ProduectFactory 가 실현 되 고 이 ProduectFactory 에서 구체 적 인 제품 을 생 성 합 니 다.
 
 
문 제 는 신제품 바나나 제품 이 도 입 될 때 공장 쪽 에 바나나 프로 덕 트 팩 토 리 를 새로 추가 하 는 것 은 문제 가 없고 클 라 이언 트 는 해당 하 는 판단 가 지 를 추가 해 야 한 다 는 것 이다.후 하 지 는 않 은 가 봐 요.클 라 이언 트 에 게 문 제 를 미 루 는 셈 이에 요.
 
 
나 는 위 에서 나의 이해 가 잘못된 부분 이 있다 는 것 을 안다.공장 모델 의 가 치 는 이것 이 아 닐 것 이다.

편차

낮 아 졌 습 니 다.이해 의 차 이 는 어디 에 있 습 니까?

좋은 웹페이지 즐겨찾기