2009-04-06 9 views
0

私はいくつかのプロパティとチャンネルを拡張するChannelProxyを持つチャンネルを持っています。このChannelProxyは、楽観的並行性を適用できるように元の値を保持します。並行性チェックとオプティミスティック並行性チェックを切り替えることができます。デザインの問題

ここでは、ChannelまたはChannelProxyのLazyLoadedChannelを実装したいと考えています。両方を拡張することはできません。この種の問題にはどのような良い解決策がありますか?

LazyLoadedChannel(拡張チャネル)とLazyLoadedChannelProxy(拡張ChannelProxy)を作成できましたが、これはコードが両方のクラスで複製されることを意味します。

答えて

2

デコレータパターンも私にとっては良い選択です。

代わりに、しかし、あなたがこれを行うことができます:

  1. は、お使いのように構成Channel遅延ロードされたまたは非レイジーロード。これを達成するにはStrategy Patternを使用できます。
  2. Channelがこのように設定可能な場合、ChannelProxyはサブクラスであるため、自動的に設定する必要があります。だからもっと何もする必要はないかもしれません。
  3. または:「ロード」が何であるかによって、ChannelProxyは独自のLoadingStrategyクラスを提供する必要があります。
+0

実際、.NETプロジェクトの例でこれを確認しました。私は両方にもっと合うものを見てみることにしよう。どうも。 –

0

上記(Dmitri)と同じように、あなたのチャンネルを飾るデコレータのようです。プロキシが必要な場合(つまり、変更しようとしているとき)にのみ値にアクセスすると仮定します。

+0

したがって、デコレータでは、チャンネル(またはChannelProx)と同じゲッターとセッターが必要ですが、チャンネルインスタンスに転送しますか? (lazyloadedしたいものを除く)。 –

+0

はい。私はフレデリックがあなたに必要なガイダンスをくれたと思っています;-)プロキシは多かれ少なかれデコレーターなので、プロキシでそれをやっていると思いました。 – Rashack

関連する問題