2010-04-17 4 views
3

저는 'Factory method'페이지를 겪고 있었고 link을 발견했습니다. 및 this comment입니다. 이 예제는 변형으로 보았고 원래의 방식대로 구현하려고 생각했습니다. 즉, 인스턴스 생성을 하위 클래스로 연기하는 것입니다 ...팩토리 메소드 구현

여기 내 시도입니다. 다음 코드는 링크에 지정된 예제의 Factory 패턴을 구현합니까? 이것이 다시 고려되어야하는지 검증하고 제안하십시오.

public class ScheduleTypeFactoryImpl implements ScheduleTypeFactory { 

    @Override 
    public IScheduleItem createLinearScheduleItem() { 
      return new LinearScheduleItem(); 
    } 

    @Override 
    public IScheduleItem createVODScheduleItem() { 
    return new VODScheduleItem(); 
    } 

} 

public class UseScheduleTypeFactory { 

    public enum ScheduleTypeEnum { 
     CableOnDemandScheduleTypeID, 
      BroadbandScheduleTypeID, 
      LinearCableScheduleTypeID, 
      MobileLinearScheduleTypeID 
    } 

    public static IScheduleItem getScheduleItem(ScheduleTypeEnum scheduleType) { 
     IScheduleItem scheduleItem = null; 
     ScheduleTypeFactory scheduleTypeFactory = new ScheduleTypeFactoryImpl(); 
     switch (scheduleType) { 
     case CableOnDemandScheduleTypeID: 
      scheduleItem = scheduleTypeFactory.createVODScheduleItem(); 
      break; 

     case BroadbandScheduleTypeID: 
      scheduleItem = scheduleTypeFactory.createVODScheduleItem(); 
      break; 

     case LinearCableScheduleTypeID: 
      scheduleItem = scheduleTypeFactory.createLinearScheduleItem(); 
      break; 

     case MobileLinearScheduleTypeID: 
      scheduleItem = scheduleTypeFactory.createLinearScheduleItem(); 
      break; 
     default: 
      break; 
     } 
     return scheduleItem; 
    } 
} 

답변

1

제 생각에는 지나치게 복잡하다고해도 괜찮습니다. ScheduleTypeFactoryImpl 클래스는 실제로 필요하지 않습니다. 그런 다음 UseScheduleTypeFactory 클래스를 ScheduleTypeFactory으로 변경할 수 있습니다.

는 내가 생각하고하는 것은 이것이다 :

공용 클래스 ScheduleTypeFactory {

public enum ScheduleTypeEnum { 
    CableOnDemandScheduleTypeID, 
     BroadbandScheduleTypeID, 
     LinearCableScheduleTypeID, 
     MobileLinearScheduleTypeID 
} 

public static IScheduleItem getScheduleItem(ScheduleTypeEnum scheduleType) { 
    IScheduleItem scheduleItem = null; 
    switch (scheduleType) { 
    case CableOnDemandScheduleTypeID: 
     scheduleItem = new VODScheduleItem(); 
     break; 

    case BroadbandScheduleTypeID: 
     scheduleItem = new VODScheduleItem(); 
     break; 

    case LinearCableScheduleTypeID: 
     scheduleItem = new LinearScheduleItem(); 
     break; 
    case MobileLinearScheduleTypeID: 
     scheduleItem = new LinearScheduleItem(); 
     break; 
    default: 
     break; 
    } 
    return scheduleItem; 
} 

}

그리고 당신은 '기본'경우를 포함 할 수 있습니다.

+0

** 이것은 ** Factory Method 패턴이 아닙니다 **; 이것은 정확하게이 OP가 참조하는 [질문] (http://stackoverflow.com/questions/806911/is-this-factory-method-creation-pattern)의 원저자가 사용한 패턴입니다. 그 질문에 대한 답은 GoF "Factory Method"가 아니라 "Simple Factory"임을 나타냅니다. (나는이 사실과 그 질문을 모두 발견했다. 왜냐하면 나는 또한 실제 * Factory Method를 더 잘 이해하려고 노력하고 있기 때문이다) –

관련 문제