2)事後の更新/通知:update
次に、Subject の状態が変化したことを、それに依存する Observer に通知します。
# Observer_gof.py
class ExSubject(EasyWindow, Subject):
def _init(self):
self._listBox.SelectionChanged += self.selectionChangeddef 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 ---通知された message をそのまま、テキスト領域 .Text に設定します。
class ButtonObserver(ExObserver):
def update(self, message):
self._textBox.Text = message
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 を再設定します。