Das Prinzip der Schnittstellensegregation, das Prinzip der ISP -Schnittstellen -Isolierung befürwortet, dass die Verwendung mehrerer dedizierter Schnittstellen besser ist als die Verwendung einer einzelnen Gesamtschnittstelle.
Die Abhängigkeit einer Klasse von einer anderen Klasse sollte auf der kleinsten Schnittstelle festgelegt werden.
Eine Schnittstelle stellt eine Rolle dar, und verschiedene Rollen sollten nicht an eine Schnittstelle übergeben werden. Die nicht verwandten Schnittstellen werden zusammengeführt, um eine aufgeblähte große Grenzfläche zu bilden, die eine Verschmutzung für die Rolle und Grenzfläche darstellt.
"Kunden sollten nicht gezwungen sein, sich auf Methoden zu verlassen, die sie nicht anwenden. Schnittstellen gehören Kunden, nicht der Klassenhierarchie, in der sie sich befinden." Das ist sehr klar. In einfachen Worten zwingen Sie Kunden nicht, Methoden zu verwenden, die sie nicht anwenden. Wenn Benutzer gezwungen sind, Methoden anzuwenden, die sie nicht verwenden, werden diese Kunden Änderungen ausgesetzt, die durch Änderungen dieser Methoden verursacht werden, die sie nicht verwenden.
Geben Sie im Anwendungsfall die vom Anrufer benötigten Methoden an und blockieren Sie unnötige Methoden. Es erfüllt das Prinzip der Schnittstellenisolation. Beispielsweise gibt es im E-Commerce-System drei Orte, die in der Auftragskategorie verwendet werden.
Gemäß dem Schnittstellen -Isolationsprinzip (ISP) sollte die Abhängigkeit einer Klasse von einer anderen Klasse an der kleinsten Schnittstelle festgelegt werden.
Das heißt, für ein Portal kann es nur auf eine Schnittstelle mit einer Abfragemethode beruhen.
Die UML -Struktur lautet wie folgt:
Schauen wir uns ein Beispiel für das Schreiben von Java -Schnittstellen an, das das Prinzip der Schnittstellenisolation ignoriert:
Schnittstelle I {public void method1 (); öffentliche void method2 (); öffentliche void method3 (); public void method4 (); öffentliche void method5 (); } class a {public void abhängig1 (i i) {i.method1 (); } public void abhängig2 (i i) {i.method2 (); } public void abhängig3 (i i) {i.method3 (); }} Klasse B implementiert i {public void method1 () {System.out.println ("method1", um die Schnittstelle I ");} public void method2 () {System.out.println (" Methode 2 der Klasse B implements B -Implements Schnittstelle I "); Method4 und Method5 sind nicht erforderlich, aber da es in der Schnittstelle A, // im Implementierungsprozess vorhanden ist, müssen diese beiden Methoden implementiert werden. } public void abhängig3 (i i) {i.method5 (); } // für die Klasse D, Methode2 und Method3 sind nicht erforderlich, aber da diese beiden Methoden in der Schnittstelle A vorhanden sind, //, selbst wenn der Methode Körper dieser beiden Methoden während des Implementierungsprozesses leer ist, müssen diese beiden Methoden, die keinen Effekt haben, implementiert werden. public void method2 () {} public void method3 () {} public void method4 () {System.out.println ("Methode 4 der Klasse D implementiert Schnittstelle I"); } public void method5 () {System.out.println ("Methode 5 der Klasse D implementiert Schnittstelle I"); }} public class Client {public static void main (string [] args) {a a = new a (); A.Depend1 (neu B ()); A.Depend2 (neu B ()); A.Depend3 (neu B ()); C c = neu c (); C.Depend1 (neu d ()); C.Depend2 (neu d ()); C.Depend3 (neu d ()); }} Es ist ersichtlich, dass, wenn die Schnittstelle zu aufgebläht ist, solange die Methoden in der Schnittstelle erscheinen, unabhängig davon, ob sie für die Klassen, die davon abhängen, nützlich sind, diese Methoden in der Implementierungsklasse implementiert werden müssen. Dies ist offensichtlich kein gutes Design. Wenn dieses Entwurf so geändert wird, dass das Prinzip der Schnittstellenisolierung eingehalten wird, muss die Schnittstelle ich geteilt werden. Hier teilen wir die ursprüngliche Schnittstelle I in drei Schnittstellen auf. Das geteilte Design ist in der folgenden Abbildung dargestellt:
Veröffentlichen Sie wie üblich den Programmcode als Referenz für Freunde, die mit dem Klassendiagramm nicht vertraut sind:
Schnittstelle I1 {public void method1 (); } Schnittstelle I2 {public void method2 (); öffentliche void method3 (); } Schnittstelle i3 {public void method4 (); öffentliche void method5 (); } class a {public void abhängig1 (i1 i) {i.method1 (); } public void abhängig2 (i2 i) {i.method2 (); } public void abhängig3 (i2 i) {i.method3 (); }} Klasse B implementiert I1, I2 {public void method1 () {System.out.println ("Methode 1 der Klasse B implementiert Schnittstelle I1"); } public void method2 () {System.out.println ("Methode 2 der Klasse B implementiert Schnittstelle I2"); } public void method3 () {System.out.println ("Methode 3 der Klasse B implementiert Schnittstelle I2"); }} Klasse c {public void Depel1 (i1 i) {i.method1 (); } public void abhängig2 (i3 i) {i.method4 (); } public void abhängig3 (i3 i) {i.method5 (); }} Klasse D implementiert I1, i3 {public void method1 () {System.out.println ("Methode 1 der Klasse D implementiert Schnittstelle I1"); } public void method4 () {System.out.println ("Methode 4 der Klasse D implementiert Schnittstelle I3"); } public void method5 () {System.out.println ("Methode 5 der Klasse D implementiert Schnittstelle I3"); }} Die Bedeutung des Prinzips der Schnittstellenisolation lautet: eine einzelne Schnittstelle herstellen, keine riesige und aufgeblähte Schnittstelle herstellen, versuchen, die Schnittstelle zu verfeinern und weniger Methoden in der Schnittstelle zu verfeinern. Mit anderen Worten, wir müssen für jede Klasse eine dedizierte Schnittstelle festlegen, anstatt zu versuchen, eine riesige Schnittstelle für alle Klassen zu etablieren, die davon abhängen, um sie anzurufen. In diesem Beispiel wird das Prinzip der Schnittstellenisolierung angewendet, wenn eine riesige Schnittstelle zu drei speziellen Schnittstellen geändert wird. Bei der Programmierung ist es flexibler, sich auf mehrere dedizierte Schnittstellen zu verlassen, als sich auf eine umfassende Schnittstelle zu verlassen. Schnittstellen sind "Verträge" für externe Einstellungen während des Designs. Durch Definieren mehrerer Schnittstellen kann die Ausbreitung externer Änderungen verhindert werden und die Flexibilität und Wartbarkeit des Systems verbessert werden.
Apropos werden viele Menschen das Gefühl haben, dass das Prinzip der Schnittstellenisolation dem vorherigen Prinzip der einzelnen Verantwortung sehr ähnlich ist, aber nicht. Erstens konzentriert sich das Prinzip der einzigen Verantwortung auf Verantwortlichkeiten. Während sich das Prinzip der Grenzflächenisolation auf die Isolierung der Grenzflächenabhängigkeit konzentriert. Zweitens sind das Prinzip der einzelnen Verantwortung hauptsächlich Einschränkungsklassen, gefolgt von Schnittstellen und Methoden, die auf die Implementierung und Details des Programms abzielen. Während das Prinzip der Grenzflächenisolierung hauptsächlich Grenzflächenschnittstellen einschränkt, das hauptsächlich auf die Abstraktion abzielt und auf die Konstruktion des Gesamtprogrammrahmens abzielt.
Wenn Sie das Prinzip der Schnittstellenisolation verwenden, um Schnittstellen einzuschränken, sollten die folgenden Punkte beachtet werden:
Die Schnittstelle sollte so klein wie möglich sein, aber begrenzt sein. Die Verfeinerung der Schnittstelle kann die Programmierflexibilität verbessern, ist eine Tatsache, dass sie nicht rentabel ist, aber wenn sie zu klein ist, verursacht sie zu viele Schnittstellen und kompliziert das Design. Es muss also moderat sein.
Customisierte Dienste für Klassen, die von Schnittstellen abhängen, nur die Methoden, die sie der genannten Klasse ausgesetzt sein müssen, und die Methoden, die sie nicht benötigen, sind versteckt. Wenn Sie sich nur auf die Bereitstellung maßgeschneiderter Dienste für ein Modul konzentrieren, können Sie eine Mindestabhängigkeitsbeziehung herstellen.
Verbesserung des Zusammenhalts und reduzieren externe Wechselwirkungen. Verwenden Sie die geringste Schnittstelle, um die meisten Dinge zu erreichen.
Bei Verwendung des Prinzips der Schnittstellenisolation muss es moderat sein. Es ist nicht gut, ein zu großes oder zu kleines Schnittstellendesign zu haben. Bei der Gestaltung von Schnittstellen kann dieses Prinzip nur durch mehr Zeit nachdenken und planen.