Lassen Sie uns den scheinbaren Widerspruch zwischen den Punkten 22 und 41 des Buches ansprechen:
Punkt 22: „Wenn Sie keinen Typ definieren möchten, verwenden Sie keine Schnittstelle.“
Dieser Artikel legt nahe, dass Sie Schnittstellen nicht für Dinge verwenden sollten, die keinen echten Typ oder keine konkrete Funktionalität darstellen. Beispielsweise ist die Verwendung einer Schnittstelle nur zum Speichern von Konstanten keine gute Vorgehensweise. Schnittstellen sollten verwendet werden, um Verträge oder Verhaltensweisen zu definieren, die Klassen implementieren sollen.
Punkt 41: „Wenn Sie wirklich einen Typ definieren möchten, verwenden Sie eine Schnittstelle.“
In diesem Artikel geht es um die Verwendung von Schnittstellen, insbesondere Markierungsschnittstellen, um einen Typ zu definieren, der Klassen auf eine Weise kategorisiert oder markiert, die zur Kompilierungszeit überprüft werden kann. Eine Markierungsschnittstelle definiert keine Methoden, definiert aber dennoch einen logischen Typ, der verwendet werden kann, um das Verhalten von Klassen zur Kompilierungszeit zu überprüfen.
Elemente abgleichen
Der Schlüssel zum Verständnis beider Elemente ist der Unterschied zwischen der Definition eines nützlichen Typs und der angemessenen Verwendung einer Schnittstelle.
Punkt 22 besagt, dass die Verwendung von Schnittstellen für Dinge vermieden werden soll, mit denen keine bestimmte Funktionalität oder kein bestimmtes Verhalten verbunden ist. Die Idee ist, dass Schnittstellen verwendet werden sollten, um klare Verträge zu definieren, denen Klassen folgen müssen.
Punkt 41 empfiehlt die Verwendung von Schnittstellen (einschließlich Markierungen), wenn Sie einen Typ definieren möchten, der Klassen für einen bestimmten Zweck kategorisiert oder markiert und der zur Überprüfung zur Kompilierungszeit verwendet werden kann.
Praktische Anwendung
Punkt 22: Vermeiden Sie dies:
public interface Constants { String SOME_CONSTANT = "value"; int ANOTHER_CONSTANT = 42; }
Dies definiert keinen Typ oder ein Verhalten; Es ist nur ein Container mit Konstanten, was eine schlechte Verwendung einer Schnittstelle darstellt.
Punkt 41: Verwenden Sie Schnittstellen, um einen Typ zu markieren:
public interface PhysicalProduct { // Interface marcadora sem métodos } public class Book implements PhysicalProduct { // Implementação da classe que indica que é um produto físico }
Hier definiert die Schnittstelle „PhysicalProduct“ einen logischen Typ, der überprüft und für bestimmte Zwecke verwendet werden kann, beispielsweise für die Versandberechnung, um sicherzustellen, dass nur physische Produkte berücksichtigt werden.
Fazit
Beide Punkte ergänzen einander, indem sie Hinweise geben, wie und wann Schnittstellen angemessen genutzt werden. Die Prämisse ist, dass Schnittstellen zur Definition sinnvoller Typen und klarer Verträge verwendet werden sollten, sei es durch Methoden, die das Verhalten definieren, oder als Markierungen, die Klassen auf logische und nützliche Weise kategorisieren.
Das obige ist der detaillierte Inhalt vonReflexion über Gegenstände und das Buch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!