안 드 로 이 드 디자인 모델 23 식 (5) - 공장 모델 (Factory)

공장 모드
이 편 에서 나 는 공장 모델 과 추상 적 인 공장 모델 두 개의 반 고 흐 를 함께 이야기 할 것 이다.
1. 단순 공장 모델
/**
 * @author: hx
 * @Time: 2019/5/6
 * @Description: Producer
 */
public interface Car {
    /**
     *          
     */
    void brand();
}

/**
 * @author: hx
 * @Time: 2019/5/6
 * @Description: Ferrari
 */
public class Ferrari implements Car {
    @Override
    public void brand() {
        System.out.println("   ");
    }
}

/**
 * @author: hx
 * @Time: 2019/5/6
 * @Description: Porsche
 */
public class Porsche implements Car {
    @Override
    public void brand() {
        System.out.println("   ");
    }
}

/**
 * @author: hx
 * @Time: 2019/5/6
 * @Description: CarFactory      
 */
public class CarFactory {
    public Car produce(String brand) {
        switch(brand){
            case "Ferrari":
                return new Ferrari();
            case "Porsche":
                return new Porsche();
            default:
                return null;
        }
    }
}

간단 한 공장 에서 알 수 있 듯 이 모든 차 가 공유 하 는 인 터 페 이 스 를 추출 하고 인터페이스 에는 모든 차 의 공 통 된 속성 과 방법, 예 를 들 어 브랜드 나 자동 운전 등 이 포함 되 어 있다.차 마다 각자 자신의 방법 을 실현 하 는 내용.카 공장 에 서 는 브랜드 별로 차 를 생산 해 출하 한다.
2. 공장 방법 모델
일반 공장 방법 모드 에서 전달 하 는 문자열 이 잘못 되 어 대상 을 정확하게 만 들 지 못 하 는 것 을 방지 하기 위해 공장 방법 모드 는 여러 공장 방법 을 제공 하여 각각 대상 을 만 듭 니 다.
/**
 * @author: hx
 * @Time: 2019/5/6
 * @Description: CarFactory      
 */
public class CarFactory {
    public Car produceFerrari(){
        return new Ferrari();
    }
    public Car producePorsche(){
        return new Porsche();
    }
}

 3. 정적 공장 방법 모델
이 모델 은 위 와 다 르 지 않 고 생산 방법 을 정태 적 인 방법 으로 바 꿀 뿐이다.
/**
 * @author: hx
 * @Time: 2019/5/6
 * @Description: CarFactory      
 */
public class CarFactory {
    public static Car produceFerrari(){
        return new Ferrari();
    }
    public static Car producePorsche(){
        return new Porsche();
    }
}

4. 추상 공장 모델
위의 공장 모델 은 우리 가 제품 을 새로 추가 해 야 할 때마다 원래 의 공장 류 안의 코드 를 수정 해 야 한 다 는 문 제 를 알 수 있다. 이렇게 하면 코드 를 확장 할 때 폐쇄 원칙 에 위배 된다.즉, 당신 이 원래 의 공장 에서 포르쉐 와 페라리 를 생산 하기 때문에 공장 안에 두 개의 생산 라인 이 있 습 니 다. 그러나 만약 당신 이 벤츠 를 생산 하고 싶다 면 어떻게 하 겠 습 니까? 당신 은 원래 의 공장 에서 개조 하고 생산 라인 을 새로 늘 려 야 합 니 다. 그러면 반드시 다른 두 개의 생산 라인 의 생산 업무 에 영향 을 줄 것 입 니 다. 그래서...우 리 는 모든 차 에 하나의 공장 을 직접 설립 하고 모든 공장 에 하나의 브랜드 의 차 만 생산 하 는 것 이 좋 겠 다. 그러면 하나의 브랜드 의 차 를 추가 하 는 것 도 다른 공장 에 영향 을 주지 않 는 다. 이것 이 바로 추상 적 인 공장 이다.다음은 코드 를 수정 하 겠 습 니 다.
생산 차 의 인 터 페 이 스 를 추가 하여 모든 공장 이 계승 하고 각각 차 를 생산 하 는 방법 을 실현 하도록 한다. 이렇게 하나의 유형 을 추가 하여 생산 된 인 터 페 이 스 를 직접 계승 하고 자신의 차 를 생산 한다. 어떠한 코드 도 수정 할 필요 가 없고 하나의 공장 과 하나의 차 유형 만 추가 해 야 한다.
/**
 * @author: hx
 * @Time: 2019/5/6
 * @Description: Producing
 */
public interface Producing {
    Car ProduceCar();
}

/**
 * @author: hx
 * @Time: 2019/5/6
 * @Description: FerrariFactory
 */
public class FerrariFactory implements Producing {
    @Override
    public Car ProduceCar() {
        return new Ferrari();
    }
}

/**
 * @author: hx
 * @Time: 2019/5/6
 * @Description: PorscheFactory
 */
public class PorscheFactory implements Producing {
    @Override
    public Car ProduceCar() {
        return new Porsche();
    }
}

public static void main(String[] args){
    Producing ferrariFactory = new FerrariFactory();
    Car ferrari = ferrariFactory.ProduceCar();
    Producing porscheFactory = new PorscheFactory();
    Car porsche = porscheFactory.ProduceCar();
}

좋은 웹페이지 즐겨찾기