观察者模式之Python实现

版权声明:转载请注明出处 https://blog.csdn.net/nk1212582/article/details/81213304

转载请注明出处 https://blog.csdn.net/nk1212582/article/details/81213304

定义

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己

结构图

代码实现

class Subject:
	def __init__(self):
		self.m_observers = list()

	def attach(self, obj):
		self.m_observers.append(obj)

	def detach(self, obj):
		self.m_observers.remove(obj)

	def notify(self):
		for obj in self.m_observers:
			obj.update()

class Observer:
	def update(self):
		raise NotImplementedError

class ConcreteSubject(Subject):
	def __init__(self):
		super().__init__()
		self.m_state = 0

	def setState(self, val):
		self.m_state = val
		self.notify()

	def getState(self):
		return self.m_state

class ConcreteObserver(Observer):
	def __init__(self, concreteSubject, name):
		super().__init__()
		self.m_concreteSubject = concreteSubject
		self.m_name = name

	def update(self):
		print("观察者{0}观察到的新状态是{1}".format(self.m_name, self.m_concreteSubject.getState()))

s = ConcreteSubject()
s.attach(ConcreteObserver(s, "X"))
s.attach(ConcreteObserver(s, "Y"))
s.setState(1)

其输出为:

观察者X观察到的新状态是1
观察者Y观察到的新状态是1

特点

解除耦合,让耦合的双方都依赖于抽象,而不依赖于具体,使得各自的变化都不会影响到另一边的变化

适用场景

当一个对象改变时,需要同时改变其他对象,尤其是当它还不知道有多少个对象有待改变时,应该考虑使用观察者模式

猜你喜欢

转载自blog.csdn.net/nk1212582/article/details/81213304