


Detaillierte Einführung in die sechs Prinzipien von Designmustern
Prinzip der Einzelverantwortung
Definition: Für einen Klassenwechsel darf es nicht mehr als einen Grund geben. Laienhaft ausgedrückt ist eine Klasse nur für eine Verantwortung verantwortlich.
Richter-Substitutionsprinzip
Definition 1: Wenn Für Für jedes Objekt o1 vom Typ T1 gibt es ein Objekt o2 vom Typ T2, sodass alle mit T1 definierten Programme P durch o2 ersetzt werden, wenn alle Objekte o1
, das Verhalten von Programm P ändert sich nicht, dann ist Typ T2 ein Untertyp von Typ T1.
Definition 2: Alle Stellen, an denen sich auf eine -Basisklasse bezieht, müssen in der Lage sein, Objekte ihrer Unterklassen transparent zu verwenden. Das heißt, überall dort, wo die Basisklasse erscheinen kann, kann die Unterklasse definitiv erscheinen
.
Das Richter-Substitutionsprinzip lautet für Laien: Unterklassen können die Funktionen der Elternklasse erweitern, aber nicht die ursprünglichen Funktionen der Elternklasse ändern. Es enthält die folgenden 4 Bedeutungsebenen:
1). Unterklassen können abstrakte Methoden der übergeordneten Klasse implementieren, jedoch keine nicht-abstrakten Methoden der übergeordneten Klasse überschreiben.
2). Unterklassen können ihre eigenen einzigartigen Methoden hinzufügen.
3 Wenn die -Methode einer Unterklasse die -Methode der übergeordneten Klasse überschreibt, werden die Voraussetzungen der Methode (d. h. die formalen Parameter der Methode) muss entspanntere Eingabeparameter haben als die Methode der übergeordneten Klasse.
4). Wenn eine Methode einer Unterklasse eine abstrakte Methode einer übergeordneten Klasse implementiert, sind die Nachbedingungen der Methode (d. h. der Rückgabewert der Methode) strenger als die der Elternklasse.
Abhängigkeitsinversionsprinzip
Definition: High-Level Module sollten sich nicht auf untergeordnete Module verlassen, die sich beide auf ihre Abstraktionen stützen sollten; sie sollten sich nicht auf Details stützen;
Die Kernidee des Abhängigkeitsinversionsprinzips ist: Programmierung für die Schnittstelle .
Es gibt drei Möglichkeiten, Abhängigkeiten zu übergeben: 1. Schnittstellenübergabe, 2. Konstruktormethodenübergabe , 3. Settermethodenübergabe.
Bei der eigentlichen Programmierung müssen wir im Allgemeinen die folgenden drei Punkte ausführen:
1). Low-Level-Module so weit wie möglich Es muss eine abstrakte Klasse oder eine Schnittstelle oder beides geben.
2). Der deklarierte Variablentyp sollte möglichst eine abstrakte Klasse oder Schnittstelle sein.
3). Befolgen Sie das Liskov-Substitutionsprinzip, wenn Sie Vererbung verwenden.
Prinzip der Schnittstellenisolation
Definition: Der Client tut es Nicht auf Schnittstellen angewiesen sein, die nicht benötigt werden; die Abhängigkeit einer Klasse von einer anderen Klasse sollte auf der kleinsten Schnittstelle basieren.
sollte Kunden eine möglichst kleine individuelle Schnittstelle bieten, anstatt eine große Gesamtschnittstelle bereitzustellen.
1). Es ist besser, mehrere spezialisierte Schnittstellen zu verwenden als eine einzige allgemeine Schnittstelle.
2). Die Abhängigkeit einer Klasse von einer anderen Klasse sollte auf der kleinsten Schnittstelle basieren.
3). Eine Schnittstelle repräsentiert eine Rolle, und einer Schnittstelle sollten keine unterschiedlichen Rollen zugewiesen werden. Irrelevante Schnittstellen werden zu einer aufgeblähten großen
Schnittstelle zusammengeführt, was eine Verschmutzung der Rollen und Schnittstellen darstellt.
4). „Clients sollten nicht gezwungen werden, sich auf Methoden zu verlassen, die sie nicht verwenden. Die Schnittstelle gehört dem Client, nicht der Klassenhierarchie, in der sie sich befindet. "
Das ist sehr klar. Um es einfacher auszudrücken: Zwingen Sie Kunden nicht dazu, Methoden zu verwenden, die sie nicht verwenden. Wenn Sie Benutzer dazu zwingen, Methoden zu verwenden, die sie nicht verwenden nicht verwenden, dann ist dies
Einige Kunden werden mit Änderungen konfrontiert, die durch Änderungen an diesen nicht verwendeten Methoden verursacht werden.
Dimit-Prinzip
Definition: ein Objekt Wissen von andere Gegenstände sollten auf ein Minimum beschränkt werden.
Offensichtlich sind das Interface-Isolation-Prinzip und das verallgemeinerte Demeter-Prinzip Einschränkungen für die Kommunikation zwischen einer Software-Entität und anderen Software-Entitäten. Das verallgemeinerte Demeter-Prinzip erfordert
, die Breite und Tiefe der Kommunikation so weit wie möglich zu begrenzen. Was das Schnittstellenisolationsprinzip einschränkt, ist die Breite der Kommunikation, das heißt, die Kommunikation sollte so eng wie möglich sein.
Demits Gesetz wird auch als das am wenigsten bekannte Prinzip bezeichnet. Es wurde erstmals 1987 von Ian Holland von der Northeastern University in den Vereinigten Staaten vorgeschlagen. Laienhaft ausgedrückt bedeutet
: Je weniger eine Klasse über die Klassen weiß, von denen sie abhängt, desto besser. Mit anderen Worten: Versuchen Sie für die abhängige Klasse, egal wie komplex die Logik ist, die Logik
innerhalb der Klasse zu kapseln, mit Ausnahme der bereitgestellten öffentlichen Methode dass keine Informationen an die Außenwelt gelangen. Es gibt eine einfachere Definition des Demeter-Gesetzes: Kommunizieren Sie nur mit Freunden, die direkt
sind. Lassen Sie uns zunächst erklären, was ein direkter Freund ist: Jedes Objekt hat eine Kopplungsbeziehung mit anderen Objekten. Solange zwischen zwei Objekten eine Kopplungsbeziehung besteht, werden wir sagen, dass diese zwei Die Objekte sind Freunde. Es gibt viele Arten der Kopplung, z. B. Abhängigkeit, Assoziation, Kombination, Aggregation usw. Unter diesen bezeichnen wir Klassen, die in Mitgliedsvariablen
, Methodenparameter und Methodenrückgabewerte erscheinen, als direkte Freunde, während Klassen, die in lokalen Variablen erscheinen, keine direkten Freunde sind . Mit anderen Worten: Unbekannte Klassen
sollten am besten nicht als lokale Variablen innerhalb der Klasse auftauchen.
Offen-Geschlossen-Prinzip
Eine Software-Entität sollte offen sein für Erweiterung, wegen Änderung geschlossen.
Prinzip der Wiederverwendung von Kombinationen/Aggregationen
Versuchen Sie es Versuchen Sie Ihr Bestes. Verwenden Sie Zusammensetzung/Aggregation anstelle von Vererbung, um eine Wiederverwendung zu erreichen.
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die sechs Prinzipien von Designmustern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Im Java-Framework besteht der Unterschied zwischen Entwurfsmustern und Architekturmustern darin, dass Entwurfsmuster abstrakte Lösungen für häufige Probleme beim Softwaredesign definieren und sich dabei auf die Interaktion zwischen Klassen und Objekten konzentrieren, beispielsweise Fabrikmuster. Architekturmuster definieren die Beziehung zwischen Systemstrukturen und Modulen und konzentrieren sich auf die Organisation und Interaktion von Systemkomponenten, wie z. B. eine geschichtete Architektur.

Das Dekoratormuster ist ein strukturelles Entwurfsmuster, das das dynamische Hinzufügen von Objektfunktionen ermöglicht, ohne die ursprüngliche Klasse zu ändern. Es wird durch die Zusammenarbeit von abstrakten Komponenten, konkreten Komponenten, abstrakten Dekoratoren und konkreten Dekoratoren implementiert und kann Klassenfunktionen flexibel erweitern, um sich ändernden Anforderungen gerecht zu werden. In diesem Beispiel werden Milch- und Mokka-Dekoratoren zu Espresso für einen Gesamtpreis von 2,29 $ hinzugefügt, was die Leistungsfähigkeit des Dekoratormusters bei der dynamischen Änderung des Verhaltens von Objekten demonstriert.

1. Factory-Muster: Trennen Sie Objekterstellung und Geschäftslogik und erstellen Sie Objekte bestimmter Typen über Factory-Klassen. 2. Beobachtermuster: Ermöglicht Subjektobjekten, Beobachterobjekte über ihre Zustandsänderungen zu benachrichtigen, wodurch eine lose Kopplung und ein Beobachtermuster erreicht werden.

Entwurfsmuster lösen Herausforderungen bei der Codewartung, indem sie wiederverwendbare und erweiterbare Lösungen bereitstellen: Beobachtermuster: Ermöglicht Objekten, Ereignisse zu abonnieren und Benachrichtigungen zu erhalten, wenn sie auftreten. Factory-Muster: Bietet eine zentralisierte Möglichkeit, Objekte zu erstellen, ohne auf konkrete Klassen angewiesen zu sein. Singleton-Muster: stellt sicher, dass eine Klasse nur eine Instanz hat, die zum Erstellen global zugänglicher Objekte verwendet wird.

Das Adaptermuster ist ein strukturelles Entwurfsmuster, das die Zusammenarbeit inkompatibler Objekte ermöglicht. Es wandelt eine Schnittstelle in eine andere um, sodass die Objekte reibungslos interagieren können. Der Objektadapter implementiert das Adaptermuster, indem er ein Adapterobjekt erstellt, das das angepasste Objekt enthält, und die Zielschnittstelle implementiert. In einem praktischen Fall kann der Client (z. B. MediaPlayer) über den Adaptermodus Medien im erweiterten Format (z. B. VLC) abspielen, obwohl er selbst nur normale Medienformate (z. B. MP3) unterstützt.

TDD wird verwendet, um hochwertigen PHP-Code zu schreiben. Die Schritte umfassen: Testfälle schreiben, die erwartete Funktionalität beschreiben und sie zum Scheitern bringen. Schreiben Sie Code so, dass nur die Testfälle ohne übermäßige Optimierung oder detailliertes Design erfolgreich sind. Nachdem die Testfälle bestanden wurden, optimieren und überarbeiten Sie den Code, um die Lesbarkeit, Wartbarkeit und Skalierbarkeit zu verbessern.

Das Guice-Framework wendet eine Reihe von Entwurfsmustern an, darunter: Singleton-Muster: Durch die @Singleton-Annotation wird sichergestellt, dass eine Klasse nur eine Instanz hat. Factory-Methodenmuster: Erstellen Sie eine Factory-Methode über die Annotation @Provides und rufen Sie die Objektinstanz während der Abhängigkeitsinjektion ab. Strategiemodus: Kapseln Sie den Algorithmus in verschiedene Strategieklassen und geben Sie die spezifische Strategie über die Annotation @Named an.

Zu den Vorteilen der Verwendung von Entwurfsmustern in Java-Frameworks gehören: verbesserte Lesbarkeit, Wartbarkeit und Skalierbarkeit des Codes. Zu den Nachteilen gehören Komplexität, Leistungsaufwand und eine steile Lernkurve aufgrund übermäßiger Nutzung. Praktischer Fall: Der Proxy-Modus wird zum verzögerten Laden von Objekten verwendet. Setzen Sie Entwurfsmuster mit Bedacht ein, um ihre Vorteile zu nutzen und ihre Nachteile zu minimieren.
