Sechs Designprinzipien
Prinzip der Einzelverantwortung
Sie dürfen nicht mehr als einen Grund für einen Klassenwechsel haben . Laienhaft ausgedrückt ist eine Klasse nur für eine Verantwortung verantwortlich.
Ursprung des Problems: Klasse T ist für zwei verschiedene Verantwortlichkeiten verantwortlich: Verantwortung P1 und Verantwortung P2. Wenn Klasse T aufgrund von Änderungen in den Anforderungen der Verantwortung P1 geändert werden muss, kann dies zu einer Fehlfunktion der Funktion der Verantwortung P2 führen, die ursprünglich normal ausgeführt wurde.
Zusammenfassung in einem Satz: Füllen Sie eine Klasse nicht einfach mit einer kleinen Menge Code für ein Bild
Richter-Substitutionsprinzip
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 eine Methode einer Unterklasse eine Methode einer übergeordneten Klasse überschreibt, sind die Voraussetzungen der Methode (d. h. die formalen Parameter der Methode) lockerer als die Eingabeparameter der 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 übergeordneten Klasse.
Zusammenfassung in einem Satz: Versuchen Sie, die implementierten Methoden der übergeordneten Klasse nicht neu zu schreiben. Sie können andere Methoden wie Schnittstellen verwenden, um das
Abhängigkeitsinversionsprinzip
import java.util.LinkedList; import java.util.Queue; interface IEAT { public void eat();//抽象吃这个动作 } class EatApple implements IEAT { @Override public void eat() { //这里是吃苹果 System.out.print("eat a apple"); } } class EatWater implements IEAT { @Override public void eat() { // 这里是吃水 System.out.print("dringk water"); } } public class Human { public void dosomething(IEAT ieat)//我爱吃东西,吃什么呢,看传入什么 { ieat.eat(); } /* public void dosomething(String food)//我爱吃东西,吃什么呢,看传入什么 { if(food.equals("apple")) { //吃苹果 } if(food.equals("water")) { //喝水 } } */ public static void main(String[] args) { Human human=new Human(); /* human.dosomething("apple"); human.dosomething("water"); */ //给你吃个苹果 human.dosomething(new EatApple()); //再给你喝点水 human.dosomething(new EatWater()); } }
Dazu gibt es nichts zu sagen: Versuchen Sie, Änderungen zu erreichen, indem Sie das Verhalten von Software-Entitäten erweitern, anstatt vorhandenen Code zu ändern.