JAVA基礎:四、接口 靜態工廠02

_________________________________________________________________________________
_________________________________________________________________________________
 假設你去公司面試,一般都會對學歷有要求,比如大學本科、碩士研究生等。
 招聘接口:“對學歷有要求”,好比是接口,這是一個寬泛的標準!這就好比是程序的接口。
 因爲公司招聘是有規章制度的,因此需要有這麼一個進人的規範。
 對“學歷要求”具體不同的內容,這就是接口的實現。
 比如HR要求人力資源或行政相關專業,
 Java開發工程師可能要求計算機相關專業。
 高級行政管理人員可能要求MBA學歷等等。
 簡單來說,就是不同部門、不同崗位對學歷的定義(或者說具體實現)是不同的。
 因此如果你在一開始就把學歷的具體內容規定死了(比如:計算機專業統招本科),
 這樣一來會有以下幾個問題產生:
 1、如果人力部門招這個專業很可能和自己部門的業務不對口,
      此時如果因此而修改學歷要求可能暫時可以滿足人力的要求,但是業務部門卻又該出麻煩了。
 2、同一部門的不同職位對於專業學歷高低要求不同。
      比如部門經理要求是研究生、普通員工要求是本科生,如果你直接寫死,
      那麼水平高的人招不進來對公司不就是損失嗎?
 軟件開發中很重要的一個理念就是“解耦”,接口和接口實現就是在幹這件事
 定好規範,任你實現,效率可高、可低,實現內容也可隨時間變化而變化,但是調用關係是不變的
 (也就是說公司在選拔人才時,無論如何學歷還是必須的一環,這一點是不會變的)
_________________________________________________________________________________
_________________________________________________________________________________
接口的作用對於很多新手來說很不容易理解,我給大家舉個例子。
接口只是一個規範,所以裏面的方法都是空的。
假如我開了一個寵物糧店,聲明所有寵物都可以來我這裏買糧食,這就相當於一個接口,
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
你想,假如沒有接口,會怎麼辦,來一個貓,我要去創造一個貓,還要實例化,來一隻狗,我要創建一隻狗,同樣要實例化,還要配備專門的店小二去接待,就會相當麻煩
_________________________________________________________________________________
_________________________________________________________________________________
大家說的都很對,我再補充一點。
接口在開發過程中可以快速分離工作內容。
比如調用者在寫業務邏輯的時候需要一個功能,可能是數據庫訪問,或者複雜計算,但是他的工作專注於實現業務邏輯,不想分開精力去做底層實現,那麼他只需要先實現一個接口,定義了規範,然後就可以繼續他的業務邏輯代碼了。
而實現者可以根據這個接口規範,做具體的實現。
這樣通過使用接口就可以快速的分離工作內容,達到團隊並行工作的目的。
此外,如果規範是通過接口定義的,那麼當你這個功能有多個實現時,你只要實現了這個接口,那麼可以快速的替換具體實現,做到代碼層面的完全可以分離。
總結起來就一句話:接口或者規範可以在開發過程中做到分離。
發佈了44 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章