공장 설계 모델(2) - 공장 모델을 일일이 열거하다.
1. 단순 공장 모델의 핵심
4
추상 제품 역할
모든 대상의 부류를 만들고 모든 실례를 설명하는 공통 인터페이스를 담당합니다.
4
2. 공장 모델을 실현하는 두 가지 방법을 매거한다
1. 비정상적인 방법을 매거하여 공장 모델을 실현한다
모든 매거항은 이 매거류의 실례 대상이다. 그러면 하나의 방법을 정의하면 모든 매거항에 대응하는 제품을 생성할 수 있다.
1. 추상적인 제품 역할
public interface Car {
String name();
}
2. 구체적인 제품 역할
public class BuickCar implements Car {
@Override
public String name() {
return "This is BuickCar";
}
}
public class FordCar implements Car {
@Override
public String name() {
return "This is FordCar";
}
}
3. 제품 공장
public enum CarFactory {
//
FordCar, BuickCar;
public Car create() {
switch (this) {
case FordCar:
return new FordCar();
case BuickCar:
return new BuickCar();
default:
throw new AssertionError(" ");
}
}
}
4. 호출 방법
@Test
public void testStaticFactory() {
Car car = CarFactory.FordCar.create();
System.out.println(car.name());
}
2. 추상적인 방법으로 제품 생성
매거 유형은 계승할 수 없지만 abstract로 그 방법을 수식할 수 있다. 이때 이 매거는 추상적인 매거 대상이고 매 매거 항목이 스스로 이 방법을 실현해야 한다는 것을 나타낸다.
1. 공장 방법
public enum AbstractCarFactory {
FordCar {
@Override
public Car create() {
return new FordCar();
}
},
BuickCar {
@Override
public Car create() {
return new BuickCar();
}
};
//
public abstract Car create();
}
2. 호출 클래스
@Test
public void testAbstractFactory(){
Car car = AbstractCarFactory.BuickCar.create();
System.out.println(car.name());
}
3. 매거류가 공장 모델의 장점을 실현한다
1. 오류 호출의 발생을 피한다
일반적인 정적 공장 모델은 클라이언트의 파라미터를 받아들여 어떤 구체적인 제품의 구축을 선택해야 하는데 이것은 어느새 오류가 발생할 수 있다(예를 들어null값 문제,Class 대상이 존재하지 않는다).그러나 매거 유형이 발생하는 공장 모델은 이 문제가 존재하지 않고 어떤 파라미터를 전달할 필요가 없고 어떤 유형의 제품을 생성할 것인지만 선택하면 된다.
2. 성능이 좋고 사용이 간편하다
매거 유형의 계산은 int 유형의 계산을 바탕으로 하는 것으로 이것은 가장 기본적인 조작이며 성능은 당연히 매우 빠르다.
3. 클래스 간의 결합을 낮춘다
일반적인 방식으로 이루어진 공장 모델은 생산 방법이 클라스, 스트링, 인트 유형을 받아들이든 클라이언트에게 부담이 될 수 있다. 이런 종류는 고객도가 필요로 하는 것이 아니라 공장 방법의 제한이 반드시 입력해야 하기 때문이다.사실은Lod(최소지식원칙)에 위배된다. 한 대상은 다른 대상에 대해 최소한의 이해를 가져야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.