Add design pattern solutions.

This commit is contained in:
paulusja 2026-05-28 16:51:53 +02:00
parent b648b70521
commit b03b89f316

View File

@ -1816,6 +1816,13 @@
"# Erweitern Sie die Klasse Database\n",
"\n",
"class Database:\n",
" __my_obj = None\n",
"\n",
" def __new__(cls):\n",
" if Database.__my_obj is None:\n",
" Database.__my_obj = super().__new__(cls)\n",
" return Database.__my_obj\n",
"\n",
" def __init__(self):\n",
" self.__entries = []\n",
"\n",
@ -1856,7 +1863,14 @@
"metadata": {},
"outputs": [],
"source": [
"# Fügen Sie hier Ihren Code für die Quadrat-Klasse ein."
"# Fügen Sie hier Ihren Code für die Quadrat-Klasse ein.\n",
"\n",
"class Quadrat:\n",
" def __init__(self, seitenlaenge):\n",
" self.__seitenlaenge = seitenlaenge\n",
"\n",
" def seitenlaenge(self):\n",
" return self.__seitenlaenge"
]
},
{
@ -1875,6 +1889,36 @@
"outputs": [],
"source": [
"# Fügen Sie hier Ihren Code für die RechteckAdapter-Klasse ein.\n",
"class Rechteck:\n",
" def seite1(self):\n",
" pass\n",
"\n",
" def seite2(self):\n",
" pass\n",
"\n",
" def umfang(self):\n",
" pass\n",
"\n",
" def flaecheninhalt(self):\n",
" pass\n",
"\n",
"\n",
"class RechteckAdapter(Rechteck):\n",
" def __init__(self, quadrat):\n",
" self.__quadrat = quadrat\n",
"\n",
" def seite1(self):\n",
" return self.__quadrat.seitenlaenge()\n",
"\n",
" def seite2(self):\n",
" return self.__quadrat.seitenlaenge()\n",
"\n",
" def umfang(self):\n",
" return self.__quadrat.seitenlaenge() * 4\n",
"\n",
" def flaecheninhalt(self):\n",
" return self.__quadrat.seitenlaenge()**2\n",
" \n",
"\n",
"def verarbeiteRechteck(rechteck):\n",
" print(f'Die 1. Seite des Rechtecks ist {rechteck.seite1()} Einheiten lang.')\n",
@ -1884,7 +1928,7 @@
"\n",
"\n",
"quadrat = Quadrat(4)\n",
"verarbeiteRechteck(quadrat) # Erstellen bzw. ergänzen Sie hier Ihr Adapter-Objekt, um es mit dem Quadrat-Objekt an die Funktion zu übergeben."
"verarbeiteRechteck(RechteckAdapter(quadrat)) # Erstellen bzw. ergänzen Sie hier Ihr Adapter-Objekt, um es mit dem Quadrat-Objekt an die Funktion zu übergeben."
]
},
{
@ -1905,12 +1949,51 @@
"source": [
"# Fügen Sie hier Ihren Code für die Klasse EntryCounter ein.\n",
"\n",
"class EntryCounter:\n",
" def __init__(self, max_persons):\n",
" self.__max_persons = max_persons\n",
" self.__count = 0\n",
" self.__lights = []\n",
" self.__state = None\n",
"\n",
" def someone_enters(self):\n",
" self.__count += 1\n",
" self.__update_state()\n",
"\n",
" def someone_leaves(self):\n",
" self.__count -= 1\n",
" self.__update_state()\n",
"\n",
" def get_count(self):\n",
" return self.__count\n",
" \n",
" def register(self, light):\n",
" self.__lights.append(light)\n",
" \n",
" def __update_state(self):\n",
" state = None\n",
" if self.__count + 1 < self.__max_persons:\n",
" state = 'green'\n",
" elif self.__count + 1 == self.__max_persons:\n",
" state = 'yellow'\n",
" else:\n",
" state = 'red'\n",
"\n",
" if state != self.__state:\n",
" for light in self.__lights:\n",
" light.update(state)\n",
" self.__state = state\n",
"\n",
"\n",
"class TrafficLight:\n",
" def __init__(self, status):\n",
" self.__status = status\n",
"\n",
" def get_light_status(self):\n",
" return self.__status\n",
" \n",
" def update(self, status):\n",
" self.__status = status\n",
"\n",
" # Erweitern Sie hier die Klasse TrafficLight um weitere Methoden, falls notwendig."
]
@ -1928,16 +2011,20 @@
"\n",
"entry_counter = EntryCounter(5)\n",
"# Fügen Sie hier zusätzlichen Code für entry_counter ein, falls notwendig, und nur, wenn Sie in der Aufgabenbeschreibung dazu aufgefordert werden.\n",
"entry_counter.register(traffic_light1)\n",
"entry_counter.register(traffic_light2)\n",
"\n",
"for enter_or_leave in [1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1]:\n",
" if enter_or_leave == 1:\n",
" entry_counter.someoneEnters()\n",
" print('Someone enters')\n",
" entry_counter.someone_enters()\n",
" elif enter_or_leave == -1:\n",
" entry_counter.someoneLeaves()\n",
" print('Someone leaves')\n",
" entry_counter.someone_leaves()\n",
" else:\n",
" print(f'Unrecognized code: {enter_or_leave}')\n",
"\n",
" print(f'People in the room: {entry_counter.getCount()}')\n",
" print(f'People in the room: {entry_counter.get_count()}')\n",
" print(f'Traffic light 1: {traffic_light1.get_light_status()}')\n",
" print(f'Traffic light 2: {traffic_light2.get_light_status()}\\n')"
]