2012-02-19 3 views
0

일부 메시지 처리 코드에서 사용중인 구조와 관련된 조언을 찾고 있습니다.추상 클래스의 확장간에 변수 공유

처리중인 메시지는 본질적으로 다양한 "세그먼트"가있는 문자열입니다. 세그먼트를 처리하기 위해 일부 클래스를 작성했습니다 (클래스 당 하나의 세그먼트 유형). 세그먼트 리더는 일반적인 메소드를 포함하는 Abstract 클래스의 확장입니다. 마지막으로 각 세그먼트 판독기에는 공개 메소드와 개인 메소드가 있습니다. 지금, 그것은이 요구되었을 때 코드의 첫 번째 버전은 각 세그먼트 리더의 생성자에 메시지를 전달 :

SegmentReaderType1 r = new SegmentReader1(message) 
String item = r.getSomethingInteresting() 

이 매우 서투른 것 - 그래서 나는 (정적 방법을 사용하여) 시도 :

String item = SegmentReaderType1.getSomethingInteresting(message) 

이것은 깨끗해 보이지만, 일부 독자는 내부적으로 복잡하기 때문에 메시지의 전달 (내부적으로)이 많이 있습니다 (이것이 좋은지 나쁜지 전혀 모릅니다.).

대안으로 나는 메시지를 추상적 부모로부터 독자에게 "공유"할 수있는 메커니즘이 있는지 궁금해하고 있습니까? 어쩌면 싱글 톤 MessageHolder가 더 나은 선택일까요?

코드는 작동하지만 더 나은 코딩 기술을 개발하려고합니다. 도움이 되었습니까?

답변

1

정적 필드와 속성을 갖는 것이 최선의 선택입니다. SegmentReaderType1 클래스에서 싱글 톤을 사용할 수 없으므로 추상 클래스를 인스턴스화 할 수 없습니다. 그리고 제 생각에 메시지를 담고있는 또 다른 수업을 만드는 것은 너무 많은 것입니다.

+0

싱글 톤으로 MessageHolder.getInstance(). setMessage (message)에 메시지를 한 번 저장하고 추상 클래스의 메서드를 통해 메시지에 액세스하는 방법을 생각했습니다. String message = getMessage() .getInstance(). getMessage() – skyman

+0

추상 클래스의 Static 필드는 클래스의 모든 확장에서 볼 수 있다고 생각하십니까? – skyman

+0

예. 더 나아가서는 정적으로 보호해야하므로 동일한 패키지 및 확장의 클래스 만이이를 사용할 수 있습니다. 내가 당신이라면 MessageHolder를 만들지 않을 것입니다. 프로그램이 정말 엉망이 될 것입니다. – reederz