Übungen zu den Designpattern
parent
7c79be3226
commit
e73836d059
|
|
@ -0,0 +1,35 @@
|
|||
1. Szenario: Texteditor-Speicheroptionen
|
||||
Beschreibung: Ein Texteditor soll dem Benutzer ermöglichen, Dokumente in verschiedenen Formaten wie TXT, RTF und DOCX zu speichern.
|
||||
Lösung: Factory Method Pattern, um für jedes Format eine eigene Speicherlogik zu implementieren.
|
||||
|
||||
2. Szenario: Nachrichten-Update-System
|
||||
Beschreibung: Eine News-Website möchte ihre Benutzer in Echtzeit über neue Artikel und Updates benachrichtigen.
|
||||
Lösung: Observer Pattern, um Benutzer zu registrieren und bei neuen Nachrichten zu benachrichtigen.
|
||||
|
||||
3. Szenario: Online-Shop Zahlungsgateway
|
||||
Beschreibung: Ein Online-Shop muss mehrere Zahlungsmethoden unterstützen, einschließlich Kreditkarten, PayPal und Google Pay.
|
||||
Lösung: Strategy Pattern, um unterschiedliche Zahlungsalgorithmen austauschbar zu machen.
|
||||
|
||||
4. Szenario: Grafische Benutzeroberfläche für ein Software-Tool
|
||||
Beschreibung: Ein Software-Tool benötigt eine einheitliche Benutzeroberfläche, die viele komplexe Systemoperationen hinter einfach zu verwendenden Knöpfen und Menüs versteckt.
|
||||
Lösung: Facade Pattern, um die Komplexität des Systems hinter einer einfachen Schnittstelle zu verbergen.
|
||||
|
||||
5. Szenario: Logging-Framework
|
||||
Beschreibung: Ein Anwendungsentwicklungsteam möchte ein flexibles Logging-Framework entwickeln, das verschiedene Ausgabeformate wie Konsole, Datei und Netzwerk unterstützt.
|
||||
Lösung: Decorator Pattern, um verschiedene Logging-Funktionalitäten dynamisch hinzuzufügen.
|
||||
|
||||
6. Szenario: IoT-Gerätesteuerung
|
||||
Beschreibung: Ein Heimautomatisierungssystem soll verschiedene IoT-Geräte wie Lampen, Thermostate und Sicherheitssysteme über eine einzige Fernbedienung steuern.
|
||||
Lösung: Command Pattern, um unterschiedliche Gerätesteuerbefehle zu kapseln und auszuführen.
|
||||
|
||||
7. Szenario: Altes CRM-System in eine moderne Webanwendung integrieren
|
||||
Beschreibung: Ein Unternehmen muss ein veraltetes CRM-System mit einer neuen Webanwendung verbinden, die eine völlig andere Datenstruktur verwendet.
|
||||
Lösung: Adapter Pattern, um die alte CRM-System-API mit der neuen Webanwendung kompatibel zu machen.
|
||||
|
||||
8. Szenario: Benutzereinstellungen in einer App
|
||||
Beschreibung: Eine App muss Benutzereinstellungen wie Sprache, Layout und andere Präferenzen über Sitzungen hinweg speichern und verwalten.
|
||||
Lösung: Singleton Pattern, um eine einzige Instanz der Einstellungsverwaltung zu haben, die überall in der App zentral zugänglich ist.
|
||||
|
||||
9. Szenario: Multi-Channel-Content-Distribution
|
||||
Beschreibung: Ein Content-Management-System (CMS) muss Content wie Artikel und Videos über verschiedene Kanäle wie Webseite, Mobile App und Social Media automatisch verteilen.
|
||||
Lösung: Observer Pattern, um verschiedene Kanäle als Beobachter des CMS-Contents zu registrieren, die bei neuen Updates benachrichtigt werden.
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Exercises_C_Sharp.E46_Designpattern
|
||||
{
|
||||
// Entwicklen Sie eine Konfigurationsmanager-Klasse, die Anwendungs-Einstellungen lädt und speichert. Die Klasse sollte das Singleton-Pattern verwenden, um sicherzustellen, dass es eine einzige Instanz gibt, die von jeder Stelle im Programm aus zugegriffen werden kann, um Konsistenz der Konfigurationsdaten über die gesamte Anwendung zu gewährleisten.
|
||||
class Exercise_1
|
||||
{
|
||||
public static void Start()
|
||||
{
|
||||
//Code START
|
||||
|
||||
//Code ENDE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Exercises_C_Sharp.E46_Designpattern
|
||||
{
|
||||
// Entwickle ein Grafikprogramm, das unterschiedliche Arten von Grafikobjekten wie Kreise, Rechtecke und Dreiecke erstellt. Benutzen Sie das Factory Method Pattern, um eine Schnittstelle zu definieren, die die Erstellung der Grafikobjekte kapselt. Jede konkrete Klasse (z.B. Kreis, Rechteck) implementiert diese Schnittstelle und gibt eine Methode zum Zeichnen des Objekts auf die Konsole zurück.
|
||||
class Exercise_2
|
||||
{
|
||||
public static void Start()
|
||||
{
|
||||
//Code START
|
||||
|
||||
//Code ENDE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Exercises_C_Sharp.E46_Designpattern
|
||||
{
|
||||
// Implementieren Sie ein Auktionshaus-System, bei dem Bieter sich für Auktionen registrieren können und Benachrichtigungen erhalten, wenn ein neues Gebot für ein Objekt abgegeben wird. Das Auktionshaus fungiert als "Subject", und die Bieter sind "Observers", die über Änderungen (neue Gebote) informiert werden müssen.
|
||||
class Exercise_3
|
||||
{
|
||||
public static void Start()
|
||||
{
|
||||
//Code START
|
||||
|
||||
//Code ENDE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Exercises_C_Sharp.E46_Designpattern
|
||||
{
|
||||
// Implementieren Sie ein E-Commerce-System, das verschiedene Zahlungsmethoden unterstützt (z.B. PayPal, Kreditkarte, Bitcoin). Verwende das Strategy Pattern, um jede Zahlungsmethode als eine Strategie zu implementieren. Dies ermöglicht es dem System, flexibel neue Zahlungsmethoden hinzuzufügen und die gewählte Methode zur Laufzeit zu wechseln.
|
||||
|
||||
class Exercise_4
|
||||
{
|
||||
public static void Start()
|
||||
{
|
||||
//Code START
|
||||
|
||||
//Code ENDE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Exercises_C_Sharp.E46_Designpattern
|
||||
{
|
||||
// Entwickeln Sie eine Anwendung, in der ein User einen String eingibt und diesen dynamisch ändern kann. Verwenden Sie hierbei das Decorator-Pattern, um Funktionalitäten wie beispielsweise das Groß-/Kleinschreiben aller Buchstaben oder einen Substring bilden zu implementieren.
|
||||
|
||||
class Exercise_5
|
||||
{
|
||||
public static void Start()
|
||||
{
|
||||
//Code START
|
||||
|
||||
//Code ENDE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Exercises_C_Sharp.E46_Designpattern
|
||||
{
|
||||
// Stellen Sie sich ein System vor, das Wetterdaten von verschiedenen externen Diensten abrufen kann, die unterschiedliche APIs haben (z.B. OpenWeatherMap, Weather.com, AccuWeather). Verwenden Sie das Adapter Pattern, um eine einheitliche Schnittstelle zu schaffen, die es dem System ermöglicht, unabhängig von den spezifischen APIs der externen Dienste Wetterdaten abzurufen. Jeder Dienst wird durch einen Adapter angesprochen, der die spezifische API in die Standard-API des Systems übersetzt.
|
||||
|
||||
class Exercise_6
|
||||
{
|
||||
public static void Start()
|
||||
{
|
||||
//Code START
|
||||
|
||||
//Code ENDE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Exercises_C_Sharp.E46_Designpattern
|
||||
{
|
||||
// Erstellen Sie eine "Computer"-Klasse, die den Startvorgang eines Computers durch verschiedene Systemkomponenten wie CPU, Speicher und Festplatte simuliert. Das Facade Pattern kann genutzt werden, um diese komplexen Interaktionen hinter einer einfachen Methode wie startComputer() zu verstecken.
|
||||
|
||||
class Exercise_7
|
||||
{
|
||||
public static void Start()
|
||||
{
|
||||
//Code START
|
||||
|
||||
//Code ENDE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Exercises_C_Sharp.E46_Designpattern
|
||||
{
|
||||
// Entwickeln Sie eine Smarthome-Steuerung. Jeder Befehl wie "Licht einschalten", "Temperatur einstellen" oder "Alarmanlage aktivieren" kann als Command implementiert werden, das von verschiedenen "Invokern" wie Fernbedienungen oder Sprachassistenten aufgerufen wird.
|
||||
|
||||
class Exercise_8
|
||||
{
|
||||
public static void Start()
|
||||
{
|
||||
//Code START
|
||||
|
||||
//Code ENDE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -611,7 +611,9 @@ namespace Exercises_C_Sharp
|
|||
{
|
||||
new(){Name = "Schere Stein Papier Echse Spock", Method = Exercises_C_Sharp.Sonderaufgaben.Exercise_1.Start},
|
||||
new(){Name = "Schiffe versenken", Method = Exercises_C_Sharp.Sonderaufgaben.Exercise_2.Start},
|
||||
new(){Name = "Memory", Method = Exercises_C_Sharp.Sonderaufgaben.Exercise_3.Start}
|
||||
new(){Name = "Memory", Method = Exercises_C_Sharp.Sonderaufgaben.Exercise_3.Start},
|
||||
new(){Name = "Minesweeper", Method = Exercises_C_Sharp.Sonderaufgaben.Exercise_4.Start},
|
||||
new(){Name = "Kniffel", Method = Exercises_C_Sharp.Sonderaufgaben.Exercise_5.Start}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue