2011-05-06 2 views
1

이 중 첫 번째는 Java로 수행됩니다. 텍스트 파일을 비 직렬화합니다. 각 행은 완전히 다른 클래스 계층 구조의 객체가됩니다. 그런 다음이 객체를 다른 객체에 제공하고 "Writer"라는 메서드를 "write (x)"라는 메서드로 호출하여 해당 객체의 일부를 다른 형식으로 직렬화합니다. 각 직렬화 해제 된 객체는 다른 클래스 계층 구조이므로 동일한 작성자로 각 객체를 처리 할 수 ​​없습니다 (내용도 매번 약간 씩 차이가 있으므로 괜찮습니다). 그러나 저를 괴롭히는 것은이 모든 과정을 조정하는 클라이언트에서 다른 객체를 구별해야한다는 것입니다. 은 "작가는"그 동안 그 일을 클라이언트없이, 무엇을, 스스로 결정할 수 있도록다른 유형의 동일한 동작 구현

이는

아마 일부 의사 코드가 도움이 될 것입니다 ... 방법입니다.

for(Line line : lines) { 
    x = one of several kinds of objects is instantiated; 
    w = one of several kinds of Writers is instantiated, analog to x; 
    w.write(x); 
} 

이상적으로 나는이 희망 ...

을 내 코드는 같을 것이다,하지만 난 개체를 구별하기 때문에 reallity에, (마지막 제외) 각 라인은 switch 문이다 혼동하지 말라.

public interface Writer { 

    void write(Object o); 

} 
,

추상 클래스 AbstractWriter, 몇 가지 일반적인 작업과 다음이 AbstractWriter를 확장하는 클래스의 숫자를 수행합니다

답변

2

보통, 이러한 경우에 당신은 인터페이스 작가를 만들어야합니다.

for (Line line : lines) { 
    Object o = readObject(line); 
    Factory.getWriter(o).write(o); 
} 
: 그런 다음 클라이언트 코드는 다음과 같이 표시됩니다

public class Factory { 

    private Factory() {} 

    public static Writer createWriter(Object o) { 
    Writer result = null; 
    if (o.getClass() == MyObject1.class) { 
     result = new MyFirstObjectWriter(); 
    } else if (...) { 
     ... 
    } else { 
     throw new IllegalArgumentException("Unsupported object class" + o.getClass()); 
    } 
    return result; 
    } 
} 

:

그런 다음 개체 유형에 따라 필요한 라이터를 작성하는 팩토리 클래스를 생성

관련 문제