2013-05-04 2 views
1

스프링을 사용하여 다음 팩토리 메서드 패턴을 구현할 수있는 방법을 알고 싶습니다. 여기 스프링을 사용하여 팩토리 메서드 패턴 구현

미리 스프링

interface FileParser { 
     void parse() 
} 

class XMLFileParser implements FileParser { 
    void parse() { 
    } 
} 

class PipeFileParser implements FileParser { 
    void parse() { 
    } 
} 

class FileParserFactory { 

    FileParser getParserInstance(String fileType) { 
    if("XML".equals(fileType) 
       return new XMLFileParer(); 
      else 
       return new PipeFileParser(); 
    } 
} 

class ActivityHandler() { 

    void handle(String fileType) { 
    FileParser fileParer = FileParserFactory.getParerInstance(fileType); 
    fileParser.parse(); 
    } 
} 

감사를 사용하지 않고 코드이다.

답변

1

새 파서를 반환 할 수있는 bean FileParserFactory를 만들 것입니다. 또한이 팩토리 빈은지도 (의 fileType => 파서) 및 기본 파서

public class FileParserFactory { 

private Map<String, FileParser> fileParsers; 
private FileParser defaultParser; 

FileParser getParserInstance(String fileType) { 
if(fileParsers.containsKey(fileType)) 
      return fileParsers.get(fileType); 
     else 
      return defaultParser; 
} 
public void setParsers(Map<String, FileParser> parsers) { 
    filePaarsers = parsers; 
} 

public void setDefaultParser(FileParser parser) { 
    defaultParser = parser; 
} 
} 

및 코드 것 ...

@Inject FileParserFactory factory;

factory.getParser(fileType);

나는 파서가 재사용 될 수 있고 스레드 안전하다고 가정한다.

이 솔루션은 더 일반적인 것으로 필요에 따라 연장 될 수 있습니다.

+0

감사합니다. Michael. 이 접근 방식을 사용하면 파일 형식이 필요한지 여부에 관계없이 모든 파서 인스턴스를 인스턴스화하게됩니다. 방법은 어때? 'code' class FileParserFactory {@ 자동 개인 XMLFileParser xmlFileParser; @ Autowired private PipeFileParser pipeFileParser; FileParser getParserInstance (String fileType) {// 여기에 올바른 파서를 결정하는 코드}}'code' – user1269701

+0

그건 상상의 문제입니다. 클래스 객체의리스트를 저장하고 처음 사용할 때 인스턴스화 할 수 있습니다. –

+0

확인. 나는 봄에 factory-method와 factory-bean에 대해 조금 읽었습니까? 여기에서 사용할 수 있습니까? – user1269701