ホームページ  >  記事  >  バックエンド開発  >  Pythonプログラムでオブザーバーパターン構造を記述する

Pythonプログラムでオブザーバーパターン構造を記述する

高洛峰
高洛峰オリジナル
2017-03-02 16:05:231409ブラウズ

オブザーバー パターン定義

は、オブジェクト間の 1 対多の依存関係を定義します。これにより、オブジェクトの状態が変化すると、そのすべての依存関係が通知され、自動的に更新されます。 Observer パターンは、被験者と観察者の間に疎結合を提供するオブジェクト設計を提供します。
デザイン原則
インタラクティブなオブジェクト間の疎結合デザインに努めます。疎結合設計によって変化に対応できる柔軟なシステムを構築できるのは、オブジェクト間の相互依存性が最小限に抑えられているためです。

モードの構造と説明

Pythonプログラムでオブザーバーパターン構造を記述する

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 サイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。