Iterater
Greifen Sie nacheinander auf Elemente zu, z. B. ein Array.
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
Beseitigen Sie Lücken zwischen APIs
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
Das Verarbeitungsframework wird in der Superklasse festgelegt, und die spezifische Verarbeitung wird in der Unterklasse beschrieben.
Logik kann geteilt werden.
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
Definieren Sie die Instanziierung in der übergeordneten Klasse (definieren Sie keinen bestimmten Klassennamen). In der Kinderklasse wird Fleisch gemacht.
Singleton
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.
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
Kopieren und erstellen Sie eine Instanz.
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
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
Verwenden Sie abstrakte Fabriken und abstrakte Teile.
Es ist einfach, eine Betonfabrik hinzuzufügen. Es ist schwierig, neue Teile hinzuzufügen (für die gesamte Betonfabrik).
Bridge
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.
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
Vereinfachen Sie die Schnittstelle. Versteckte komplizierte Verarbeitung ausblenden. Es dient als Fenster für die komplizierte Verarbeitung.
Um nur das Paket zugänglich zu machen
//public
public class Sample{
}
//Machen Sie es nur innerhalb des Pakets zugänglich.
class Sample{
}
Strategy
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
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.
Das Verzeichnis kann rekursiv auf den Eintrag zugreifen. Wenn Datei eine Baumstruktur ist, wird verlassen Verzeichnis ist ein Zweig.
Decorator
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.
Die Anzahl der kleinen Klassen wird zunehmen.
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
Parent obj = new Child(); ((Child)obj).childMethod();
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
Separate Datenstruktur und Verarbeitung. Erstellen Sie eine Besucherklasse, die die Datenstruktur besucht, und lassen Sie diese Klasse damit umgehen.
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.
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