接口的形象化

作者:知乎用戶
鏈接:https://www.zhihu.com/question/20111251/answer/14760353
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

接口的作用對於很多新手來說很不容易理解,我給大家舉個例子。
接口只是一個規範,所以裏面的方法都是空的。
假如我開了一個寵物糧店,聲明所有寵物都可以來我這裏買糧食,這就相當於一個接口,

public interface PetRestaurant {
public void buy();
}

當一隻狗看到了,知道自己是寵物,所以它去實現這個接口
public class DogPet implements PetRestaurant {
@Override
public void buy() {
System.out.println("我是狗,我要買狗糧");
}
}
當一隻貓看到了,知道自己也是寵物,所以也去實現這個接口
public class CatPet implements PetRestaurant {
@Override
public void buy() {
System.out.println("我是貓,我要買貓糧");
}

}
當狗和貓來我的店之前,我是不知道他們到底是什麼,但是當他們來到我的店,我就知道一個要貓糧食,一個要狗糧食。因爲他們都實現了 我這個接口,都可以買。下面這個類相當於一個接待顧客的類,即店小二,他接待所有實現了我這個寵物店接口的動物,傳進來一個PetRestaurant 類型的寵物,注意,這個PetRestaurant 是接口
public class test {
public void buy(PetRestaurant pet)
{
pet.buy();
}
}

好了,這個時候我這個老闆出現了,我可以給他們賣糧食了,相當於測試類
public class Tests {
public static void main(String[] args) {
PetRestaurant dog = new DogPet(); //實例化一個狗,相當於把狗顧客實例化
PetRestaurant cat = new CatPet();//實例化一個貓,相當於把貓顧客實例化

test t = new test(); //實例化一個店小二
t.buy(cat); //把貓交給店小二
t.buy(dog); //把狗交給店小二
}

}
這樣運行的結果就是
我是貓,我要買貓糧
我是狗,我要買狗娘

你知道嗎,整個過程我這個店主其實根本不知道來的到底是貓是狗還是其他什麼,我只要有一個店小二,把這些來的不知什麼動物都全部交給店小二,店小二就知道怎麼去賣了,因爲這些狗啊貓啊都實現了我這個寵物店的接口,而店小二就負責接待所有實現了我這個接口的動物。這就有一個好處,假如明天來了一頭小豬,只要它實現了我這個接口,我只管交給店小二處理就OK了,我這個店小二根本不需要變化,我這個店主也只需要實例化一下這個動物就OK
你想,假如沒有接口,會怎麼辦,來一個貓,我要去創造一個貓,還要實例化,來一隻狗,我要創建一隻狗,同樣要實例化,還要配備專門的店小二去接待,就會相當麻煩
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章