2008年9月28日 星期日

[Object-Oriented] Interface

在JAVA中,interface的使用對於有學過JAVA的人來說,我想一定是不陌生的。但是,確實該如何好好的使用interface的強大功能,我想沒有經驗的programmer應該是陌生的!

有相當多的書籍中,皆有提到關於Polymorphism的強大之處,但是想要真正使用到,對於沒有經驗的人來說,有點困難之處。

Polymorphism與interface之間的關連,就像是Mechanism與Policy一樣。Polymorphism是一種Mechanism,而interface就是一種實現Polymorphism的Policy。

舉個簡單的例子,假設我們要採用"防盜"的機制(Mechanism),那我們可以選擇的策略(Policy)就有很多種,我們可以選擇加裝更好的鎖來達到防盜的目的,或是我們可以請保全公司來加裝保全系統等,都是可以達到我們當初所設定的目標。所以 Mechanism 是一種目標,而 Policy 則是達成目標所可以選擇的方法。

回想起在某一本書中看到,interface定義一種data type,某個class implements interface就會擁有該種data type。然而,interface的使用,不僅僅可以讓程式變得簡潔有力,並且達到限制基本功能的能力,還可以增加系統的彈性。就像對於學生與老師之間的關連,老師接受教導學生,但是學生本身卻有上千種不同特質,所以我們可以利用interface來定義所有的學生,並且要求他們具有基本的能力,諸如:選課、翹課等。

所有想要被老師所教導的各種學生,都必須實做出學生interface所約束的基本能力,i.e.選課與翹課。老師接受一個實做學生interface的object,就可以對他的基本能力做呼叫,這樣就算是一種Polymorphism。

也就是,見人說人話,見鬼說鬼話。

interface使得系統中的Extensibility, Flexibility, Pluggability 獲得保證

沒有留言: