Android
Designmuster
Suche…
Einführung
Entwurfsmuster sind formalisierte Best Practices, die der Programmierer verwenden kann, um häufige Probleme beim Entwurf einer Anwendung oder eines Systems zu lösen.
Entwurfsmuster können den Entwicklungsprozess beschleunigen, indem bewährte Entwicklungsparadigmen bereitgestellt werden.
Durch die Wiederverwendung von Entwurfsmustern werden subtile Probleme vermieden, die zu großen Problemen führen können. Außerdem wird die Lesbarkeit von Code für Codierer und Architekten verbessert, die mit den Mustern vertraut sind.
Singleton-Klassenbeispiel
Java Singleton Pattern
Um das Singleton-Muster zu implementieren, haben wir unterschiedliche Ansätze, aber alle haben gemeinsame Konzepte.
- Privater Konstruktor, um die Instantiierung der Klasse von anderen Klassen zu beschränken.
- Private statische Variable derselben Klasse, die die einzige Instanz der Klasse ist.
- Öffentliche statische Methode, die die Instanz der Klasse zurückgibt. Dies ist der globale Zugriff
- Punkt für die äußere Welt, um die Instanz der Singleton-Klasse zu erhalten.
/**
* Singleton class.
*/
public final class Singleton {
/**
* Private constructor so nobody can instantiate the class.
*/
private Singleton() {}
/**
* Static to class instance of the class.
*/
private static final Singleton INSTANCE = new Singleton();
/**
* To be called by user to obtain instance of the class.
*
* @return instance of the singleton.
*/
public static Singleton getInstance() {
return INSTANCE;
}
}
Beobachtermuster
Das Beobachtermuster ist ein allgemeines Muster, das in vielen Zusammenhängen weit verbreitet ist. Ein reales Beispiel kann aus YouTube entnommen werden: Wenn Sie einen Kanal mögen und alle Nachrichten abrufen und neue Videos von diesem Kanal ansehen möchten, müssen Sie diesen Kanal abonnieren. Immer wenn dieser Kanal Neuigkeiten veröffentlicht, erhalten Sie (und alle anderen Abonnenten) eine Benachrichtigung.
Ein Beobachter hat zwei Komponenten. Einer ist ein Sender (Kanal) und der andere ist ein Empfänger (Sie oder ein anderer Teilnehmer). Der Sender wird alle Empfängerinstanzen behandeln, die ihn abonniert haben. Wenn der Sender ein neues Ereignis auslöst, wird dies allen Empfängerinstanzen mitgeteilt. Wenn der Empfänger ein Ereignis empfängt, muss er auf dieses Ereignis reagieren, z. B. indem Sie YouTube einschalten und das neue Video abspielen.
Beobachtermuster implementieren
Der Sender muss Methoden zur Verfügung stellen, die es Empfängern ermöglichen, ihn zu abonnieren und abzubestellen. Wenn der Sender ein Ereignis auslöst, müssen die Abonnenten darüber informiert werden, dass ein Ereignis aufgetreten ist:
class Channel{ private List<Subscriber> subscribers; public void subscribe(Subscriber sub) { // Add new subscriber. } public void unsubscribe(Subscriber sub) { // Remove subscriber. } public void newEvent() { // Notification event for all subscribers. } }
Der Empfänger muss eine Methode implementieren, die das Ereignis vom Sender übernimmt:
interface Subscriber { void doSubscribe(Channel channel); void doUnsubscribe(Channel channel); void handleEvent(); // Process the new event. }