class Subscriber:
	def __init__(self, name):
		self._name = name

	def update(self, message):
		print(f"{self._name} received the message {message}")


class Publisher:
	def __init__(self):
		self._subscribers = set()

	def register(self, candidate):
		self._subscribers.add(candidate)

	def unregister(self, candidate):
		self._subscribers.discard(candidate)

	def dispatch(self, message):
		for eachsubscriber in self._subscribers:
			eachsubscriber.update(message)


a = Subscriber("alice")
b = Subscriber("bob")
c = Subscriber("cathy")
d = Subscriber("dom")

pub = Publisher()
pub.register(a)
pub.register(b)
pub.register(c)
pub.register(d)

pub.dispatch("Hello World")
pub.unregister(d)
pub.unregister(b)
pub.dispatch("New World")