本文主要是介绍设计模式之美笔记——面向对象四大特性 之 多态,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
设计模式之美-05
多态:是指,子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现。
多态也是很多设计模式、设计原则、编程技巧的代码实现基础,比如策略模式、基于接口而非实现编程、依赖倒置原则、里式替换原则、利用多态去掉冗长的 if-else 语句等等。
利用接口类实现多态
public interface Iterator {boolean hasNext();String next();String remove();
}public class Array implements Iterator {private String[] data;public boolean hasNext() { ... }public String next() { ... }public String remove() { ... }//...省略其他方法...
}public class LinkedList implements Iterator {private LinkedListNode head;public boolean 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);}
}
在这个例子中,我们利用多态的特性,仅用一个 print() 函数就可以实现遍历打印不同类型(Array、LinkedList)集合的数据。当再增加一种要遍历打印的类型的时候,比如 HashMap,我们只需让 HashMap 实现 Iterator 接口,重新实现自己的 hasNext()、next() 等方法就可以了,完全不需要改动 print() 函数的代码。
所以说,多态提高了代码的可扩展性。如果我们不使用多态特性,我们就无法将不同的集合类型(Array、LinkedList)传递给相同的函数(print(Iterator iterator) 函数)。我们需要针对每种要遍历打印的集合,分别实现不同的 print() 函数,比如针对 Array,我们要实现 print(Array array) 函数,针对 LinkedList,我们要实现 print(LinkedList linkedList) 函数。而利用多态特性,我们只需要实现一个 print() 函数的打印逻辑,就能应对各种集合数据的打印操作,这显然提高了代码的复用性。
这篇关于设计模式之美笔记——面向对象四大特性 之 多态的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!