디자인 모델 의 추상 적 인 공장 모델 --- abstract factory

모델 소개
패턴 정의
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
관련 되 거나 서로 의존 하 는 대상 을 만 들 기 위해 인 터 페 이 스 를 제공 합 니 다. 구체 적 인 종 류 를 지정 할 필요 가 없습니다.
유형
창조 류
모드 의 사용 장면
추상 적 인 공장 모델 의 사용 장면 정 의 는 매우 간단 하 다. 한 대상 족 (또는 한 조 가 아무런 관계 가 없 는 대상) 은 모두 똑 같은 제약 을 가지 고 추상 적 인 공장 모델 을 사용 할 수 있다.
UML 도표
캐릭터 소개
(1) AbstractProduct 류: 추상 적 인 제품 류 의 정의 (2) Concrete Porduct 류: 구체 적 인 제품 의 실현 (3) AbstractFactory 류: 추상 적 인 공장 의 정의 (4) Concrete Factory 류: 구체 적 인 공장 의 실현
모델 의 단순 실현
고양이 의 추상 클래스 정의:
public abstract class ACat {
    public abstract void color();
}

검 은 고양이 류 와 흰 고양이 류 를 하나 더 실현 한다.
public class WhiteCat extends ACat{

    @Override
    public void color() {
        // TODO Auto-generated method stub
        System.out.println("i am is a white cat");
    }
}
public class BlackCat extends ACat {

    @Override
    public void color() {
        // TODO Auto-generated method stub
        System.out.println("i am is a black cat");
    }
}

마찬가지 로 개의 추상 류 를 정의 한다.
public abstract class ADog {
    public abstract void color();
}

두 가지 색깔 을 실현 하 는 구체 적 인 개 류 (검 은 개, 흰 개):
public class WhiteDog extends ADog {

    @Override
    public void color() {
        // TODO Auto-generated method stub
        System.out.println("i am is a white dog");
    }
}
public class BlackDog extends ADog {

    @Override
    public void color() {
        // TODO Auto-generated method stub
        System.out.println("i am is a black dog");
    }
}

추상 적 인 공장 클래스 를 정의 하고 두 개의 인 터 페 이 스 를 정의 합 니 다. 하 나 는 cat 를 만 들 고 하 나 는 dog 을 만 듭 니 다.
public abstract class AFactory {
    /**create cat**/
    public abstract ACat createCat();
    /**create dot**/
    public abstract ADog createDog();
}

white 공장 을 실현 하고 white 의 dog 과 cat 를 만 드 는 것 을 책임 집 니 다.
public class WhiteColorFactory extends AFactory{

    @Override
    public ACat createCat() {
        // TODO Auto-generated method stub
        return new WhiteCat();
    }

    @Override
    public ADog createDog() {
        // TODO Auto-generated method stub
        return new WhiteDog();
    }
}

마찬가지 로 블랙 공장 을 실현 하고 블랙 의 dog 과 cat 를 만 드 는 것 을 책임 집 니 다.
public class BlackColorFactory extends AFactory{

    @Override
    public ACat createCat() {
        // TODO Auto-generated method stub
        return new BlackCat();
    }

    @Override
    public ADog createDog() {
        // TODO Auto-generated method stub
        return new BlackDog();
    }
}

클 라 이언 트 호출:
public class AbstractFactory {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        AFactory whiteColorFactory = new WhiteColorFactory();
        ACat whiteCat = WhiteColorFactory.createCat();
        whiteCat.color();
        ADog whiteDog = whiteColorFactory.createDog();
        whiteDog.color();

        AFactory blackColorFactory = new BlackColorFactory();
        ACat blackCat = BlackColorFactory.createCat();
        blackCat.color();
        ADog blackDog = blackColorFactory.createDog();
        blackDog.color();
    }
}

출력 결과:
i am is a white cat
i am is a white dog
i am is a black cat
i am is a black dog

여기 서 우 리 는 우리 의 소스 코드 목록 에 이미 10 가지 유형 이 있다 는 것 을 알 게 될 것 이다. 이렇게 간단 한 기능 을 실현 하려 면 우 리 는 10 가지 유형 을 사용 해 야 한다. 만약 에 더욱 복잡 한 제품 관계 가 있다 면 사람 을 류 의 바다 에 빠 뜨 려 죽 이 는 리듬 이 될 것 이다.그러면 결론 적 으로 추상 적 인 공장 모델 은 많은 중간 류 를 만들어 복잡 도 를 증가 시 키 는 것 도 이 모델 의 큰 단점 이다.
이 모델 을 다시 분석 합 니 다. 만약 에 우리 가 회색 – gray) 의 cat 와 dog (즉, 한 제품 에 하나의 등급 을 추가 해 야 합 니 다) 을 추가 하려 면 다음 과 같이 수정 할 수 있 습 니 다. 우 리 는 각각 Gray Cat 과 Gray Dog 류 를 새로 만 들 고 Gray ColorFactory 류 를 추가 하여 각각 gray cat 와 gray dog 을 만 들 수 있 습 니 다.수 요 는 간단 한 확장 을 통 해 이 루어 질 수 있다.수 정 된 분류 도 는 다음 과 같다.
만약 에 지금 우리 가 돼지 (pig) 를 만 드 는 대상 (즉, 제품 족 을 추가 하 겠 다 는 것) 을 추가 하면 이 수정 은 먼저 AFactory (공장 추상 류) 에서 createPig 추상 적 인 방법 을 만 든 다음 에 모든 구체 적 인 공장 류 (BlackColorFactory, White ColorFactory) 를 대응 하 는 수정 을 해 야 한 다 는 것 을 알 게 될 것 이다.개 폐 원칙 을 심각하게 위반 한 것 은 분명 하 다.추상 류 와 인 터 페 이 스 는 계약 이 라 고 합 니 다. 계약 을 바 꾸 면 계약 과 관련 된 모든 코드 를 수정 해 야 합 니 다. 그러면 이 코드 는 '유독 코드' 라 고 합 니 다.추상 적 인 공장 모델 의 또 다른 단점 이기 도 하 다.
추상 적 인 공장 모델 의 가로 (제품 등급 추가) 확장 이 쉽 고 세로 (제품 족 추가) 확장 이 어렵 다 는 것 이다.
패턴 의 장단 점
장점.
포장 성 고 층 모듈 은 공장 류 의 인터페이스 와 추상 에 만 관심 을 가지 고 공장 류 의 인터페이스 만 알 면 우 리 는 필요 한 대상 을 만 들 고 시간 을 절약 할 수 있다.공장 류 는 대상 의 창설 세부 사항 을 책임 진다.
결점.
추상 모델 의 가장 큰 단점 은 입 중간 류 가 비교적 많 고 시스템 의 복잡 도 를 증가 하 며 사용 하기에 비교적 복잡 하 다 는 것 이다.생각해 보면 가장 간단 하고 추상 적 인 공장 모델 만 해도 제품 과 관련 된 유형 이 6 개 에 달 했 고 공장 과 관련 된 유형 도 3 개 에 달 했다. 여기 에는 9 가지 유형 이 있 는데 조금 복잡 한 제품 이 있 으 면 이런 수량 이 더 많 을 것 이 라 고 상상 할 수 있다. 이것 은 우리 가 평소에 이 모델 을 적 게 사용 하 는 근본 적 인 원인 이다.
추상 적 인 공장 모델 의 또 다른 단점 은 제품 족 확장 이 어렵 다 는 것 이다.
Android 소스 코드 의 모드 구현
추상 적 인 공장 모델 의 단점 을 바탕 으로 우 리 는 이 모델 을 많이 사용 하지 않 습 니 다. 저 는 아직 안 드 로 이 드 소스 코드 에서 이 모델 을 보지 못 했 습 니 다. 나중에 보충 합 니 다.
참고 자료
(1) 디자인 모델 (2) - 추상 공장 (AbstractFactory) - (JAVA 버 전)http://blog.csdn.net/hfreeman2011/article/details/8350196 (2). 디자인 모델 의 선 - 제9 장 추상 공장 모델

좋은 웹페이지 즐겨찾기