2012-02-19 3 views
0

Просто ищите рекомендации относительно структуры, которую я использую в некотором коде обработки сообщений.Обмен переменными между расширениями абстрактного класса

Сообщения, которые я обрабатываю, являются, по существу, строками с различными «сегментами». Я написал несколько классов для обработки сегментов (один тип сегмента для каждого класса). Считыватели сегментов являются расширениями абстрактного класса, который включает в себя общие методы. Наконец, каждый читатель сегментов имеет общедоступные, а также частные методы. Теперь первая версия кода передает сообщение конструктору каждого читателя сегмента, как это требовалось:

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

Это кажется очень неуклюжая - поэтому я попытался (используя статические методы):

String item = SegmentReaderType1.getSomethingInteresting(message) 

Это кажется более чистым, однако некоторые читатели сложны внутри, поэтому есть много сообщений (внутри) сообщения (я понятия не имею, хорошо это или плохо?).

В качестве альтернативы, мне было интересно, существует ли механизм, посредством которого я мог бы «поделиться» посланием от абстрактного родителя к читателям? Может быть, синглтон MessageHolder станет лучшим выбором?

Код работает, однако я действительно пытаюсь разработать лучшие методы кодирования. Любая помощь оценивается

ответ

1

Наличие статического поля и имущества - лучший выбор в вашем случае. Вы не можете использовать singleton с классом SegmentReaderType1, потому что невозможно создать экземпляры абстрактных классов. И сделать еще один класс только для того, чтобы держать сообщение, на мой взгляд, слишком много.

+0

С помощью Singleton я думал больше о сохранении сообщения один раз в MessageHolder.getInstance(). SetMessage (message), а затем обратился к нему с помощью метода в абстрактном классе: String message = getMessage(), который просто вызывает MessageHolder .getInstance(). getMessage() – skyman

+0

Я полагаю, что статическое поле в абстрактном классе будет видно всем расширениям класса? – skyman

+0

Да. Еще лучше сделайте защиту статичной, поэтому только классы из одного пакета и расширения могут использовать ее. Я бы не стал MessageHolder, если бы был вами, это заставит вашу программу действительно запутать. – reederz

Смежные вопросы