디자인 모드 에 세이 (1)

"공장 모드".
공장 모델 은 가장 익숙 하고 광범 위 하 게 사용 되 는 모델 일 것 이다.그 역할 도 뚜렷 하 다. 유형의 실현 디 테 일 을 사용자 와 분리 시 켜 사용자 에 게 보이 지 않 게 하고 특정한 사례 를 생 성 해 야 할 때 사용 자 는 공장 방법 을 호출 하여 인 스 턴 스 를 얻는다.이렇게 하면 사용자 자체 가 클래스 의 어떠한 실현 세부 사항 도 이해 할 필요 가 없고 실례 의 생명주기 도 유지 할 필요 가 없 으 며 직접 가 져 와 서 사용 하면 된다.전형 적 인 공장 모델 의 코드 는 다음 과 같다.
public class PersonFactory{
    // person     
     public Person newInstance();
}

//      :
Person p = PersonFactory.newInstance();

 상기 코드 는 간단 한 프로젝트 에서 흔히 볼 수 있 지만 정확히 말 하면 이런 용법 은 진정한 공장 모델 이 아니 거나 이른바 공장 모델 이 없다 고 할 수 있다.GOF 에서 정 의 된 것 은 공장 방법 모델 과 추상 적 인 방법 모델 뿐이다.상술 한 이런 사용 자 는 사실 간단 한 공장 이라는 모델 이다.간단 한 공장 모델 은 앞의 두 가지 모델 과 큰 차이 가 있 는데 그 어떠한 추상 도 하지 않 았 다. 쉽게 말 하면 생 성 대상 의 도구 류 를 정의 한 것 이다.예 를 들 어 상기 사례 에서 person 은 Girl 과 Boy 두 가지 키 가 있다 면 간단 한 공장 으로 이 루어 진 코드 는 다음 과 같다.
 
public class PersonFactory{
    // person     
     public Person createBoy(){
           //      Male  
     }

    
     public Person createGirl(){
           //      FeMale  
     }

}

//      :
Person boy = PersonFactory.createBoy();
Person girl = PersonFactory.createGirl();

즉, 간단 한 공장 은 Person 의 모든 하위 클래스 에 하나의 방법 을 정의 하여 해당 하 는 대상 으로 돌아 가 는 것 이다.단지 변 화 를 격 리 하기 위해 서 라면, 이런 방식 을 사용 하 는 것 이 바람 직 하 다.그러나 이런 방식 은 OOP 원칙 중의 '개폐 원칙' 에 위배 되 는 것 으로 모든 하위 클래스 의 첨가 가 공장 류 에 영향 을 미 치기 때문이다.더 좋 은 실현 방식 은 앞에서 소개 한 공장 방법 모델 과 추상 적 인 공장 모델 을 사용 하 는 것 이다.
 
공장 방법 모델
책 에서 공장 방법 모델 에 대한 설명 은 다음 과 같다.
 
 
Exposes
a method for creating objects, allowing subclasses to control the actual creation process.
 
즉, 창조 대상 의 방법 을 추상 화하 여 진정한 창 조 를 하위 클래스 에 남 겨 실현 하 는 것 이다.여기 서 강조 하 는 것 은 '방법' 이 고 공장 방법 모델 은 바로 하나의 방법 을 추상 화 하 는 것 이다.그래서 추상 적 인 방법 을 사용 하여 추상 적 인 유형 으로 돌아 가면 공장 방법 모델 을 사용 하고 있다 고 할 수 있다.공장 방법 모델 의 전형 적 인 유형 도 는 그림 1 과 같다.그림 속
추상 류 Creator 에서 추상 적 인 방법 Factory Method () 를 발 표 했 는데 그 실현 은 하위 클래스 ConcreteCreator 에서 Concrete Product 의 실례 대상 을 되 돌려 주 었 다.공장 방법 을 사용 하여 창조 방법 을 추상 화한 후에 '개폐 원칙' 에 부합 되 었 다.Product 에 하위 클래스 를 추가 해 야 할 때 Creator 류 의 하위 클래스 를 새로 만 들 고 공장 방법 실현 에서 Product 에 해당 하 는 하위 클래스 의 인 스 턴 스 를 되 돌려 주면 됩 니 다. 기 존 클래스 를 수정 하지 않 아 도 됩 니 다.이것 은 시스템 이 확 장 될 수 있 는 방향 (수직 방향) 이 고 시스템 도 다른 방향 으로 확 장 될 수 있다 (수평 방향). 간단 한 공장 의 예 를 들 어 사람 은 모두 피부색 이 있 기 때문에 창조 한 boy 와 girl 에 게 서로 다른 피부색 을 부여 하려 면 원래 의 것 이 아니 라 노란색, 검은색 등 이 있 을 수 있다.이런 상황 에서 공장 확장 방법 모델 중의 유형 을 통 해 간단하게 실현 할 수 없다. 왜냐하면 이 때 는 평행 제품 라인 을 새로 만 들 었 기 때문이다.이 문 제 를 해결 하 는 방법 중 하 나 는 추상 적 인 공장 모델 을 사용 하 는 것 이다.
 
추상 공장 모드
책 에서 추상 적 인 공장 모델 에 대한 묘 사 는 다음 과 같다.
Provide an
interface that delegates creation calls to one or more concrete classes in order to deliver specific objects.
 
 추상 적 인 공장 모델 은 제품 족 을 만 드 는 추상 적 인 유형 (인터페이스) 을 제공 하 는데 그 실현 은 구체 적 인 서브 클래스 에서 이 루어 진 것 이다.여기 서 강조 하 는 것 은 하나의 유형 을 추상 화 하 는 것 이다. 이런 유형 에서 제품 족 을 만 드 는 방법 을 설명 했다.일반적인 방법 은 제품 족의 모든 제품 에 추상 적 인 방법 (즉 공장 방법) 을 설명 하 는 것 이다.이 는 공장 방법 과 추상 적 인 공장 이 한 차원 의 개념 (유형 과 방법의 차이) 이 아니 라 전 자 는 후자 가 실현 하 는 실행 가능 한 방식 임 을 나타 낸다.추상 적 인 공장 모델 의 유형 구조 도 는 그림 2 와 같다.
 
이 그림 에서 추상 적 인 추상 적 인 Abstract Platform 에서 두 공장 방법 을 밝 혔 는데 각각 ProductOne 과 ProductTwo 를 만 드 는 데 사용 된다.두 개의 하위 클래스 에서 각각 이 두 가지 방법 을 실현 하여 해당 하 는 대상 을 얻 었 다.
추상 적 인 공장 모델 은 간단 한 공장 모델 중의 문 제 를 해 결 했 지만 '개폐 원칙' 을 완전히 만족 시 키 는 것 도 아니다.아 날로 그 에서 알 수 있 듯 이 새로운 제품 라인 을 추가 해 야 할 때 간단하게 Abstract Platform 류 의 하위 클래스 를 확장 하여 실현 할 수 있다. 이런 부분 은 개폐 원칙 을 만족 시 키 는 것 이다.그런데 제품 라인 에 새로운 제품 을 추가 하려 면 요?이때 어 쩔 수 없 이 원래 의 각 유형의 실현 을 수정 하고 각각 신제품 의 공장 방법 을 더 해 야 한다.
 
공장 모델 위의 공장 모델.
공장 모델 은 추가 공장 류 를 추가 하여 사용자 에 게 하위 클래스 를 격 리 시 켜 실현 하 는 세부 사항 을 추가 하지만 이런 격 리 는 해당 공장 류 를 아 는 토대 에서 이 루어 진 것 이다.예 를 들 어 Boy Factory 는 Boy 의 실현 디 테 일 을 차단 하고 Person 의 추상 을 되 돌려 주 었 다. 사용 자 는 Boy 류 의 존 재 를 알 필요 가 없 지만 이런 목적 을 달성 하기 위해 Boy Factory 의 대상 을 가 져 야 한다.보이 에 대한 의존 을 보이 팩 토리 로 옮 긴 것 이다.다음 두 가지 호출 방법 을 비교 하면 알 수 있다.
 
//          
Person boy = new Boy();

//           
Factory factory = new BoyFactory();
Person boy = factory.createPerson();

 
이때 이러한 의존 관 계 를 더욱 결합 시 키 기 위해 공장 모델 위 에 공장 모델 을 한 층 더 포장 할 수 있다. 즉, 공장 모델 을 통 해 Boy Factory 등 공장 류 를 얻 을 수 있다.
 
위 에서 도 알 수 있 듯 이 디자인 모델 의 결합 관 계 를 해결 하 는 일반적인 방법 은 바로 두 가지 유형 사이 에 세 번 째 유형 을 추가 하여 이 두 가지 관 계 를 처리 하 는 것 이다.기 존의 의존 관 계 는 사라 지지 않 고 세 번 째 유형 으로 옮 겨 갔다.
 
공장 모델 은 본질 적 으로 IOC 에 해당 하 는 type 2 이다.Factory 를 하나의 용기 로 보고 사용자 가 이 용기 에 의존 하여 인 스 턴 스 대상 을 가 져 오 는 것 이다.코드 에서 이러한 의존 관 계 를 완전히 없 애 려 면 IOC 의 type 3, 즉 주입 (DI) 에 의존 하여 클래스 간 의존 관 계 를 설정 파일 에 두 고 용 기 는 설정 파일 을 통 해 의존 관 계 를 주동 적 으로 주입 할 수 있 습 니 다.사용 자 는 주동 적 으로 대상 의 인 스 턴 스 를 얻 을 필요 가 없 이 직접 꺼 내 사용 하면 된다.

좋은 웹페이지 즐겨찾기