2013-02-04 2 views
-1

저는 초보자입니다. 그리고 AbstractFactory에 대한 기사를 읽었습니다. 그리고 간단한 예제를 작성하기로 결정하십시오.AbstractFactory 사용하기

public interface ParserFactory { 
    List<ITransport> getBusList(); 
    List<ITransport> getTrainList(); 
    List<ITransport> getPlainList(); 
} 


public abstract class XMLParserFactory implements ParserFactory{ } 
public abstract class CSVParserFactory implements ParserFactory{ } 

public class DOMTransportParser extends XMLParserFactory{ 

    public List<ITransport> getBusList(){ return null; } 
    public List<ITransport> getTrainList(){ return null; } 
    public List<ITransport> getPlainList(){ return null; } 
} 

public class CSVTransportParser extends CSVParserFactory{ 

    public List<ITransport> getBusList(){ return null; } 
    public List<ITransport> getTrainList(){ return null; } 
    public List<ITransport> getPlainList(){ return null; } 
} 

} 

만약 내가 틀린 것이 있거나, AbstractFactory를 사용하는 감각을 이해한다면 뭔가를 개선하기위한 조언을 원합니다.

+4

에 속해 있습니다 : codereview.stackexchange.com – Sednus

답변

1
List<ITransport> getBusList(); 
List<ITransport> getTrainList(); 
List<ITransport> getPlainList(); 

이 냄새가 나는가? 지금 공장에서 두 가지 차이를 추상화하고 있습니다.

  1. 직렬화의 종류 (CSV 또는 XML) 직렬화 얻을 개체의 유형 (당신은 ITransport 인터페이스를 만들었습니다)

하지만 당신은 확실히 두 번째 추상화를 성공하지있어 메서드 이름은 여전히 ​​읽는 형식을 반영하기 때문에.

List<IBus> getBusList(); 
List<ITrain> getTrainList(); 
List<IPlain> getPlainList(); 

을 그리고 다른 공장, 기차 버스를 인스턴스화 할 수 있습니다 : 당신이 함께 속해있는 객체의 인스턴스를 생성하고자하는 경우

그래서 하나의 List<ITransport> getTransportList();, 날

에 더 많은 의미를 또는 것 및 예를 들어 동일한 패키지의 Plain 클래스가 있습니다.

+0

귀하의 의견과이 기사에 따르면 'http : //stackoverflow.com/questions/4209791/design-patterns-abstract-factory-vs-factory-method? lq = 1' 결과적으로 나는 초록 공장이 아닌 단순 공장을 얻는다. – Ray

+0

하지만 다른 유형의 객체도 만들어야합니다. – flup