공장 방법 모델 은 어떻게 간단 한 작업 방법 중의 부족 을 해결 합 니까?
간단 한 공장 모델 의 예제 코드 를 먼저 보 세 요.
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 에서 구체 적 인 제품 을 생 성 합 니 다.
문 제 는 신제품 바나나 제품 이 도 입 될 때 공장 쪽 에 바나나 프로 덕 트 팩 토 리 를 새로 추가 하 는 것 은 문제 가 없고 클 라 이언 트 는 해당 하 는 판단 가 지 를 추가 해 야 한 다 는 것 이다.후 하 지 는 않 은 가 봐 요.클 라 이언 트 에 게 문 제 를 미 루 는 셈 이에 요.
나 는 위 에서 나의 이해 가 잘못된 부분 이 있다 는 것 을 안다.공장 모델 의 가 치 는 이것 이 아 닐 것 이다.
“
편차
”
낮 아 졌 습 니 다.이해 의 차 이 는 어디 에 있 습 니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.