“你好,阿米戈!又是我。我想給你關於接口的另一種觀點。你看,大多數時候類是特定對象的模型。相比之下,接口更像是對象的能力或角色,而不是對象本身。”

例如,汽車、自行車、摩托車和車輪等事物最好表示為類和對象。但是他們的能力,比如“我可以移動”、“我可以載人”和“我可以停車”,最好用界面來表示。看看這個例子:
Java代碼 | 描述 |
---|---|
|
對應移動能力。 |
|
對應移動能力。 |
|
對應運載貨物的能力。 |
|
一個 «wheel» 類。有移動能力。 |
|
一個“汽車”類。具有移動、由人駕駛和運載貨物的能力。 |
|
一個“滑板”類。具有移動和被人控制的能力。 |
接口極大地簡化了程序員的生活。程序通常有數千個對象、數百個類和幾十個接口(角色)。角色很少,但可以通過多種方式(類)進行組合。
重點是您不必編寫定義與其他每個類交互的代碼。您所要做的就是與角色(接口)進行交互。
想像一下,你是一個機器人建造者。你有幾十個下屬機器人,每個機器人都可以擁有多種技能。假設你需要緊急完成一堵牆的建造。您只需將所有具有“建造”能力的機器人帶走,然後告訴它們建造牆即可。你真的不在乎是哪個機器人做的。讓它成為一個機器人噴壺。如果它知道如何構建,就讓它構建。這是它在代碼中的樣子:
Java代碼 | 描述 |
---|---|
|
能夠“建造一堵牆”。理解命令«建造一堵牆»(有適當的方法)。 |
|
具有這種能力/技能的機器人。
噴壺不能建牆(它沒有實現 WallBuilder 接口)。 |
|
我們如何下達建造一堵牆的命令? |
“這太有趣了。我做夢也沒想到界面會成為如此有趣的話題。”
“然後是一些!再加上多態性,這真是令人驚嘆。”
GO TO FULL VERSION