オブザーバー パターン定義
は、オブジェクト間の 1 対多の依存関係を定義します。これにより、オブジェクトの状態が変化すると、そのすべての依存関係が通知され、自動的に更新されます。 Observer パターンは、被験者と観察者の間に疎結合を提供するオブジェクト設計を提供します。
デザイン原則
インタラクティブなオブジェクト間の疎結合デザインに努めます。疎結合設計によって変化に対応できる柔軟なシステムを構築できるのは、オブジェクト間の相互依存性が最小限に抑えられているためです。
モードの構造と説明
1.Subject: サブジェクト(ターゲット)インターフェイス。サブジェクトは、興味のあるオブザーバーを登録および削除でき、また、自身のデータがオブザーバーを変更したときにオブザーバーに通知することもできます。被験者には複数の観察者が存在できますが、観察者の順序は重要ではないことに注意することが重要です。トピックは「オブザーバブル」とも呼ばれます
2. トピックのステータスが変化したときに通知できるように、すべてのオブザーバーはオブザーバー インターフェイスを実装する必要があります
オブザーバー パターンは広く使用されている非常に重要なデザイン パターンであり、オブジェクト間の結合を軽減するのに役立ちます。オブジェクトが高度なコラボレーションを維持できるようになります。このパターンの疎結合特性は以下に反映されています。
1. オブザーバーに関するすべて。サブジェクトはオブザーバー インターフェイスを実装していることだけを知り、それ以外は何も知りません
2. いつでもサブジェクトのオブザーバーを動的に追加でき、削除されました
3. 新しいタイプのオブザーバーが出現した場合、テーマのコードを変更する必要はありません
4. テーマとオブザーバーのどちらかを変更しても、他方には影響しません
例
コメント~
#observer pattern class subject(): def __init__(self,dat): self.listobj = list() #主题中的列表变量用来存储观察者 self.dat = dat #主题中的数据变化时,需要通知观察者 def registerObject(self,obj): self.listobj.append(obj) #实现订阅主题的函数 def removeObject(self,obj): pass def notifyObservers(self):#通知各个观察者数据已经发生变化,观察者相应需要更新自己的数据 for i in range(len(self.listobj)): self.listobj[i].update() def setdat(self,new_dat):#设置数据 if self.dat != new_dat: self.dat = new_dat self.notifyObservers() class observer():#观察者 def __init__(self,sub): #观察者初始化时,需要订阅主题 self.sub = sub self.sub.registerObject(self) self.number = self.sub.dat def update(self):#观察者更新 self.number = self.sub.dat def display(self): print self.number if __name__ =="__main__": su = subject(10) ob1 = observer(su) ob1.display() ob2 = observer(su) ob2.display() su.setdat(11) ob1.display() ob2.display()
Python プログラムでのオブザーバー パターン構造の記述に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。