Definition: Der Kunde sollte nicht von Schnittstellen abhängen, die er nicht verlangt. Die Abhängigkeit einer Klasse von einer anderen sollte auf der kleinsten Schnittstelle festgelegt werden.
Das Problem entsteht: Klasse A hängt von der Klasse B über Schnittstelle I ab und hängt von der Klasse D über Schnittstelle I ab. Wenn die Schnittstelle I nicht die kleinste Schnittstelle für die Klasse A und Klasse B ist, müssen die Methoden der Klasse B und Klasse D, die sie nicht benötigen, implementieren.
Lösung: Teilen Sie die aufgeblähte Schnittstelle I in mehrere unabhängige Schnittstellen auf, und Klasse A und Klasse C stellen Abhängigkeiten von den von ihnen benötigten Schnittstellen fest. Das heißt, das Prinzip der Schnittstellenisolation wird übernommen.
Lassen Sie uns ein Beispiel geben, um das Prinzip der Schnittstellenisolation zu veranschaulichen:
Die Bedeutung dieser Abbildung lautet: Klasse A hängt von den Methoden 1, Methode 2, Methode 3 in der Schnittstelle I ab, und Klasse B ist eine Implementierung der Abhängigkeit von Klasse A. Klasse C hängt von den Methoden 1, Methode 4, Methode 5 in der Schnittstelle I ab, und Klasse D ist eine Implementierung von Abhängigkeit von der Klasse C. Für die Klasse B und D ist beide nicht verwendete Methoden.
Schauen wir uns zunächst ein Beispiel für die Verletzung der Schnittstellenisolation an:
public interface iworker {public void work (); öffentliche void eat (); } public Class Worker implementiert iWorker {@Override public void work () {// toDo Worker Arbeit} @Override public void eat () {// todo Worker Eat}} öffentliche Klassenroboter implementiert iWorm {@Override public void work () {// todo Robot Work} @Override public void void () {// todo roboot @override öffentlich () {// todo roboot @override public void () {// todo Robot @override public void () {// todo Robot @override öffentlich () {// todo Robot @override öffentlich () {// todo Robot usw. }}
Da Roboter nicht essen müssen, gilt IWWER als aufgeblähte Schnittstelle. Natürlich können Sie auch kurzfristige Implementierung der EAT-Methode in der Roboterklasse implementieren, dies kann jedoch unvorhersehbare Fehler verursachen. Wenn die EAT -Methode beispielsweise die Anzahl der Brotdosen verbrauchen muss, gibt es ein falsches Phänomen.
Das Folgende ist die geänderte Implementierung:
public interface iworker {public void work (); } public interface idiet {public void eat (); } public class Worker Implements iWorker, Idiet {@Override public void work () {// Todo Work} @Override public void Eat () {// Todo Work}} public class Robot implementiert iworker {@Override public void work () {// todo Robot Work}}}}}}}}}}}}}}}
Zusammenfassen:
1. Die Schnittstelle sollte so klein wie möglich und sehr kohärent sein, aber sie sollte angemessen und zu detailliert und schwer zu warten.
2. Wenn es als aufgeblähte Schnittstelle konzipiert wurde, kann es mit dem Adaptermodus isoliert werden.