2)事後の更新/通知:update

次に、Subject の状態が変化したことを、それに依存する Observer に通知します。

# Observer_gof.py
class ExSubject(EasyWindow, Subject):
def _init(self):
self._listBox.SelectionChanged += self.selectionChanged

def selectionChanged(self, sender, e):
s = sender.SelectedItem.Content
for e in self.observers:
e.update(s)

リスト項目を選択すると、イベント SelectionChanged が発生します。これに呼応してイベントハンドラー selectionChanged では、self.observers が保持する各要素 e に対して、Subject の状態が変化したことを通知 update します。
ExObserver の傘下にあるクラスでは、通知された message を頼りに、それぞれの状態を更新します。

# -------------------------------------------------- before ---
class ButtonObserver(ExObserver):
def update(self, message):
self._textBox.Text = message
通知された message をそのまま、テキスト領域 .Text に設定します。

class SliderObserver(ExObserver):
def update(self, message):
brush = getattr(Brushes, message)
self._colorBox.Background = brush
e = brush.Color
self.R.Value = e.R
self.G.Value = e.G
self.B.Value = e.B

通知された message から色情報 brush を獲得して、キャンバスの背景色 .Background を設定します。また、色成分(赤/緑/青)ごとに、スライダーの値 .Value を再設定します。


Previous|1/3|Next