1. 程式人生 > >設計模式-行為型模式,觀察者模式(13)

設計模式-行為型模式,觀察者模式(13)

IT color 行為型模式 行為型 它的 pan value 依賴 更新

當對象間存在一對多關系時,則使用觀察者模式(Observer Pattern)。比如,當一個對象被修改時,則會自動通知它的依賴對象。觀察者模式屬於行為型模式。

有時,我們希望在一個對象的狀態改變時更新另外一組對象。

class Publisher:

    def __init__(self):
        self.observers = []

    def add(self, observer):
        if observer not in self.observers:
            self.observers.append(observer)
        
else: print(Failed to add: {}.format(observer)) def remove(self, observer): try: self.observers.remove(observer) except ValueError: print(Failed to remove: {}.format(observer)) def notify(self): [o.notify(self) for o in
self.observers] class DefaultFormatter(Publisher): def __init__(self, name): Publisher.__init__(self) self.name = name self._data = 0 def __str__(self): return "{}: ‘{}‘ has data = {}".format(type(self).__name__, self.name, self._data) @property
def data(self): return self._data @data.setter def data(self, new_value): try: self._data = int(new_value) except ValueError as e: print(Error: {}.format(e)) else: self.notify() class HexFormatter: def notify(self, publisher): print("{}: ‘{}‘ has now hex data = {}".format(type(self).__name__, publisher.name, hex(publisher.data))) class BinaryFormatter: def notify(self, publisher): print("{}: ‘{}‘ has now bin data = {}".format(type(self).__name__, publisher.name, bin(publisher.data))) def main(): df = DefaultFormatter(test1) print(df) print() hf = HexFormatter() df.add(hf) df.data = 3 print(df) print() bf = BinaryFormatter() df.add(bf) df.data = 21 print(df) print() df.remove(hf) df.data = 40 print(df) print() df.remove(hf) df.add(bf) df.data = hello print(df) print() df.data = 15.8 print(df) if __name__ == __main__: main()

設計模式-行為型模式,觀察者模式(13)