前言
剛剛有個憨批學妹跑來問我多態的低耦合性是怎麼體現的。於是我也複習了一下,整理如下。
多態
多態是指,子類可以替換父類,在實際的代碼運行過程中,調用子類的方法實現。
接下來,我們先來看如何利用接口類來實現多態特性。
public interface Iterator {
String hasNext();
String next();
String remove();
}
public class Array implements Iterator {
private String[] data;
public String hasNext() { ... }
public String next() { ... }
public String remove() { ... }
//...省略其他方法...
}
public class LinkedList implements Iterator {
private LinkedListNode head;
public String hasNext() { ... }
public String next() { ... }
public String remove() { ... }
//...省略其他方法...
}
public class Demo {
private static void print(Iterator iterator) {
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
public static void main(String[] args) {
Iterator arrayIterator = new Array();
print(arrayIterator);
Iterator linkedListIterator = new LinkedList();
print(linkedListIterator);
}
}
在這段代碼中,Iterator 是一個接口類,定義了一個可以遍歷集合數據的迭代器。Array 和 LinkedList 都實現了接口類 Iterator。我們通過傳遞不同類型的實現類(Array、LinkedList)到 print(Iterator iterator) 函數中,支持動態的調用不同的 next()、hasNext() 實現。
具體點講就是,當我們往 print(Iterator iterator) 函數傳遞 Array 類型的對象的時候,print(Iterator iterator) 函數就會調用 Array 的 next()、hasNext() 的實現邏輯;當我們往 print(Iterator iterator) 函數傳遞 LinkedList 類型的對象的時候,print(Iterator iterator) 函數就會調用 LinkedList 的 next()、hasNext() 的實現邏輯。
多態的意義
多態特性能提高代碼的可擴展性和複用性。爲什麼這麼說呢?我們回過頭去看看剛剛舉的實例)。在那個例子中,我們利用多態的特性,僅用一個 print() 函數就可以實現遍歷打印不同類型(Array、LinkedList)集合的數據。當再增加一種要遍歷打印的類型的時候,比如 HashMap,我們只需讓 HashMap 實現 Iterator 接口,重新實現自己的 hasNext()、next() 等方法就可以了,完全不需要改動 print() 函數的代碼。所以說,多態提高了代碼的可擴展性。如果我們不使用多態特性,我們就無法將不同的集合類型(Array、LinkedList)傳遞給相同的函數(print(Iterator iterator) 函數)。我們需要針對每種要遍歷打印的集合,分別實現不同的 print() 函數,比如針對 Array,我們要實現 print(Array array) 函數,針對 LinkedList,我們要實現 print(LinkedList linkedList) 函數。而利用多態特性,我們只需要實現一個 print() 函數的打印邏輯,就能應對各種集合數據的打印操作,這顯然提高了代碼的複用性。
這也就利用的多態的特性去實現了低耦合,比如我們新加一個功能,我們不會去改之前的代碼,刪一個功能不用動之前的代碼
希望各位大佬指正