2012-02-19 22 views
0

一部のメッセージ処理コードで使用している構造に関するアドバイスを探しています。抽象クラスの拡張の間で変数を共有する

私が処理しているメッセージは、基本的にさまざまな「セグメント」を持つ文字列です。私は、セグメントを処理するいくつかのクラスを作成しました(クラスごとに1つのセグメントタイプ)。セグメントリーダーは、一般的なメソッドを含む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

私は、抽象クラスの静的フィールドは、クラスのすべての拡張機能で見られると思いますか? – skyman

+0

はい。さらに、静的に保護されるようにすることで、同じパッケージ内のクラスと拡張機能だけがそれを使用できるようになります。 私があなただったら私はMessageHolderを作っていないでしょう、あなたのプログラムは本当に面倒です。 – reederz

関連する問題