Created
February 15, 2023 05:50
-
-
Save chienhsiang-hung/a74123e075386afd8e58247439773f3a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class Subject:\n", | |
" def __init__(self):\n", | |
" self._observers = []\n", | |
"\n", | |
" def attach(self, observer):\n", | |
" self._observers.append(observer)\n", | |
"\n", | |
" def detach(self, observer):\n", | |
" self._observers.remove(observer)\n", | |
"\n", | |
" def notify(self):\n", | |
" for observer in self._observers:\n", | |
" observer.update(self)\n", | |
"\n", | |
"class Observer:\n", | |
" def update(self, subject):\n", | |
" pass\n", | |
"\n", | |
"class ConcreteObserver(Observer):\n", | |
" def update(self, subject):\n", | |
" print(f\"Subject {id(subject)} has been updated\")\n", | |
"\n", | |
"class ConcreteSubject(Subject):\n", | |
" def __init__(self):\n", | |
" super().__init__()\n", | |
" self._state = None\n", | |
"\n", | |
" def get_state(self):\n", | |
" return self._state\n", | |
"\n", | |
" def set_state(self, state):\n", | |
" self._state = state\n", | |
" self.notify()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Subject 1606222143296 has been updated\n", | |
"Subject 1606222143296 has been updated\n" | |
] | |
} | |
], | |
"source": [ | |
"subject = ConcreteSubject()\n", | |
"observer1 = ConcreteObserver()\n", | |
"observer2 = ConcreteObserver()\n", | |
"\n", | |
"subject.attach(observer1)\n", | |
"subject.attach(observer2)\n", | |
"\n", | |
"subject.set_state(\"Sunny\")" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.9.5" | |
}, | |
"orig_nbformat": 4, | |
"vscode": { | |
"interpreter": { | |
"hash": "1b231fd55510270dbc2eaafeacb1ac5de2910453973c3eda2b3f9024c6c2bec4" | |
} | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment