Grobe Zusammenfassung des GoF-Java-Entwurfsmusters

Dieser Artikel ist eine persönliche Zusammenfassung von "Einführung in in der Java-Sprache erlernte Entwurfsmuster".

Iterater

Zweck

Greifen Sie nacheinander auf Elemente zu, z. B. ein Array.

Inhalt

hasNext () gibt mit boolean zurück, wenn es die folgenden Elemente enthält: Suchen Sie dann nach Elementen und führen Sie next () aus next () greift auf das nächste Element zu

Adopter

Zweck

Beseitigen Sie Lücken zwischen APIs

verdienen

Die Wiederverwendbarkeit wird verbessert, indem ein Teil erstellt wird, das zwischen die beiden APIs passt und die Lücke beseitigt. Implementieren Sie die gewünschte Schnittstelle (API), ohne vorhandene Klassen anzupassen

Template Method

Zweck

Das Verarbeitungsframework wird in der Superklasse festgelegt, und die spezifische Verarbeitung wird in der Unterklasse beschrieben.

verdienen

Logik kann geteilt werden.

Hinweis

Die übergeordnete Klasse wird durch eine abstrakte Klasse definiert. Wenn es sich um eine Schnittstelle handelt, kann die übergeordnete Klasse den Prozess nicht schreiben.

Factory Method

Zweck

Definieren Sie die Instanziierung in der übergeordneten Klasse (definieren Sie keinen bestimmten Klassennamen). In der Kinderklasse wird Fleisch gemacht.

Singleton

Zweck

Nur eine Instanziierung Indem Sie den Konstruktor privat machen, können Sie die Instanziierung außerhalb der Klasse verhindern. Der einzige Weg, auf eine Instanz zuzugreifen, besteht darin, nur eine Instanz mit getInstance () zurückzugeben.

Hinweis

private static Singleton singleton = null;
if(singleton == null){
    singleton = new Singleton;
}

Mit dem bedingten Ausdruck können abhängig vom Status der Maschine mehrere Instanzen erstellt werden, wenn sie in mehreren Threads ausgeführt werden. Machen Sie es asynchron oder erstellen Sie es im Voraus.

Prototype

Zweck

Kopieren und erstellen Sie eine Instanz.

Hinweis

Die Klonmethode ist eine flache Kopie. Überschreiben und implementieren Sie Deep Copy, wodurch der Inhalt der Instanz kopiert wird. Eine flache Kopie kopiert nur den Inhalt der Felder der Instanz so wie sie sind. Die Klonmethode wird nicht initialisiert, daher muss sie separat initialisiert werden.

Builder

Zweck

Erstellen Sie die gesamte Struktur in der übergeordneten Klasse und bauen Sie Schritt für Schritt eine komplizierte Verarbeitung auf Durch die Erhöhung der Unabhängigkeit ist es einfacher, die Korrekturen und Ergänzungen zu verstehen.

Abstract Factory

Zweck

Verwenden Sie abstrakte Fabriken und abstrakte Teile.

Hinweis

Es ist einfach, eine Betonfabrik hinzuzufügen. Es ist schwierig, neue Teile hinzuzufügen (für die gesamte Betonfabrik).

Bridge

Zweck

Trennen Sie Funktionen und Implementierungen und überbrücken Sie sie. Funktion: Verarbeitung usw. Implementierung: Klasse, wenn sie für die Implementierung verwendet wird

Wenn Sie die Anzahl der Funktionen erhöhen, werden alle Funktionen zur Implementierungsklasse hinzugefügt, sodass die Funktionen einfacher erhöht werden können.

Hinweis

Da die Implementierung häufig kompliziert ist, wird sie nur verwendet, wenn der Implementierungsteil häufig geändert wird. Zum Beispiel, wie man mit der Abhängigkeit vom Betriebssystem umgeht Sie können die Implementierung ändern, ohne die Funktionalität zu ändern.

Facade

Zweck

Vereinfachen Sie die Schnittstelle. Versteckte komplizierte Verarbeitung ausblenden. Es dient als Fenster für die komplizierte Verarbeitung.

Hinweis

Um nur das Paket zugänglich zu machen

//public
public class Sample{

}

//Machen Sie es nur innerhalb des Pakets zugänglich.
class Sample{

}

Strategy

Zweck

Der Algorithmus kann geändert werden. Durch die Verwendung der Delegierung ist die Verbindung schwächer als die Vererbung, und der Algorithmus kann leicht geändert werden.

Composite

Zweck

Machen Sie es eine Holzstruktur. Identifizieren Sie den Container und den Inhalt, um eine rekursive Struktur zu erstellen. Komposit-> "Mischung" "Komposit"

FileDirectory Das Dateiverzeichnis enthält Dateien und Verzeichnisse. Wenn Sie Dateien der Reihe nach betrachten, setzen Sie sie mit Unterverzeichnissen oder Dateien gleich. image.png

Das Verzeichnis kann rekursiv auf den Eintrag zugreifen. Wenn Datei eine Baumstruktur ist, wird verlassen Verzeichnis ist ein Zweig.

Beispiel

Decorator

Zweck

Decken Sie es vom Kern der Funktion von einer Haut zur anderen ab und fügen Sie es hinzu. Funktionen können hinzugefügt werden, ohne Inhalte hinzuzufügen. Durch die Verwendung der Delegierung ist eine lose Kopplung möglich und es können dynamische Funktionen hinzugefügt werden. Unter Beibehaltung der transparenten Schnittstelle (API) werden Funktionen hinzugefügt, indem Objekte abgedeckt werden.

Fehler

Die Anzahl der kleinen Klassen wird zunehmen.

(Extra Edition) Vererbung und Delegation

Vererbungsunterklassen können mit Oberklassen gleichgesetzt werden.

class Parent {
    ...
    void parentMethod(){
        ...
    }
}
class Child extends Parent {
    ...
    void childMethod(){
        ...
    }
}

Parent obj = new Child(); obj.parentMethod(); Eine Instanz von Child kann so wie sie ist einer Variablen vom Typ Parent zugewiesen werden. Sie können von Parent geerbte Methoden aufrufen. Mit anderen Worten Behandelt eine Instanz von Child so, als wäre es eine Instanz von Parent. </ font> </ strong> Dies ist ein Beispiel für die Betrachtung einer Unterklasse als Oberklasse


und umgekehrt Besetzung erforderlich, um die Oberklasse als Unterklasse zu betrachten

Parent obj = new Child(); ((Child)obj).childMethod();

Delegation - Identifizieren Sie sich und den Delegierten

Wenn die Schnittstelle mithilfe der Delegierung transparent ist, können Sie sich mit dem Delegierungsziel gleichsetzen.

class Rose {
    Violet obj = ...
    void method(){
        obj.method();
    }
}

class Violet {
    void method(){
        ...
    }
}

Rose und Violet haben dieselbe Methode, und Rose delegiert an Violet ... aber es ist nicht angegeben, dass es sich um gängige Methoden handelt.

abstract class Flower {
    abstract void method();
}

interface Flower {
    abstract void method();
}

Kann wie oben angegeben werden Je nach Fall richtig verwenden.

Visitor

Zweck

Separate Datenstruktur und Verarbeitung. Erstellen Sie eine Besucherklasse, die die Datenstruktur besucht, und lassen Sie diese Klasse damit umgehen.

image.png

Führt eine bestimmte Verarbeitung für das Element durch, das die Datenstruktur enthält. Das Besuchermuster verbessert die Unabhängigkeit der Datei- und Verzeichnisklassen als Teile. Wenn Sie den Inhalt des Prozesses als Methode der Datei- oder Verzeichnisklasse programmieren, müssen Sie die Datei- oder Verzeichnisklasse jedes Mal ändern, wenn Sie einen neuen "Prozess" hinzufügen und die Funktion erweitern möchten.

Andere

LSP (Riskovs Ersatzprinzip)

Wenn die übergeordnete Klasse für den relationalen Ausdruck wahr ist, ist auch die abgeleitete kleine Klasse der übergeordneten Klasse wahr. (Substitutionsmöglichkeit)

The Open-Closed Principle Verbieten Sie zukünftige Erweiterungen nur, wenn Sie einen bestimmten Grund dafür haben. Sie müssen jedoch nicht jedes Mal eine vorhandene Klasse ändern, wenn Sie sie erweitern.

Mit anderen Worten, ermöglicht, dass vorhandene Klassen ohne Änderung erweitert werden </ strong> Das ist.

Hoch wiederverwendbare Klassen sind geschlossen. Zeichenfolgen werden geschlossen, da sie beim Erweitern in hohem Maße wiederverwendbar und ineffizient sind. (Kann nicht erweitert werden, da es in der letzten Klasse definiert ist.)

Recommended Posts