クラスが先祖の1つを照会できるようにするには、どのデザインを使用する必要がありますか?

StackOverflow https://stackoverflow.com/questions/1826643

質問

コントロールに描画されるテーブルを表すオブジェクト階層を作成しています。私の階層は次のようになります:

Table has multiple pages
Page has multiple lines
Line has multiple cells
Cell has multiple glyph

表示される列(セル)をフィルター処理するためのオプション(パラメーター)をテーブルに設定します。クライアントコードは次のようなことを実行できます。

myTable.ShowColumns(8,12) // Will display columns 8 to 12

コントロール上のセルの表示と配置はLinesオブジェクトの役割です。どのセルを表示するかという情報をTableオブジェクトからLineオブジェクトに渡すにはどうすればよいですか

各行にテーブルオブジェクトへの参照を与える必要がありますか? Table.ShowColumns()が呼び出されるたびに、階層内の各行に情報を渡そうとしますか?

エレガントな方法が必要ですか?

役に立ちましたか?

解決

デザインパターンが必要だとは思わない。 (または、私はそれをそのように呼びません) 子が親に、またその逆にリンクするダブルリンクを使用しないのはなぜですか?

他のヒント

私が正しく理解していれば、あなたが「祖先」と呼んでいるものは、実際には階層内のです。これは、ツリー。また、ツリーでは、子ノードにそれぞれの親を参照させることが一般的です。

ShowColumns関数の設計に関しては、Linesクラスでの同様の内部関数呼び出しにより、Linesクラス(セルを保持する)の内部状態変数を変更する必要があると思います。

// something like this..
Table.ShowCollumns -> Table.m_lines.SetVisibleColumns -> (modify visible columns)

明らかに、列のページへの論理マッピング、およびページからテーブルへの論理マッピングに応じて、 Lines クラスで SetVisibleColumns を呼び出す前に、さらに別の呼び出しを挿入する必要がある場合があります。正しいページオブジェクトを見つけるために: Table.FindPageWithColumns(...)そしてそのオブジェクトを操作します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top