抽象類更注重料扰,類和類之間的關系焙蹭,和存在的約束。
接口更注重對類的行為約束孔厉,統(tǒng)一規(guī)則帖努。
設計模式的定義:
設計模式(Design pattern)代表了最佳的實踐粪般,通常被有經(jīng)驗的面向對象的軟件開發(fā)人員所采用。設計模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案亩歹。
工廠模式總結:
大概流程:使用一個接口,不同實體類舅柜,實現(xiàn)相同的一個借口躲惰。在工廠類的某個get()方法中根據(jù)輸入條件,選擇創(chuàng)建某一個實體類础拨。
我的問題:為什么是用接口去約束實體類,而不是使用抽象類滔蝉?
我的答案:因為在工廠模式中,并不需要讓實體類繼承某個特定成員屬性蝠引。而這里僅僅需要讓實體類遵循某種規(guī)范(如重寫相同的方法)蛀柴,并且實現(xiàn)同一個接口后,這些實體類都會具有一個繼承后產(chǎn)生的特性即為傳遞性(子類繼承父類后鸽疾,父類可以作為子類的引用),這樣在工廠類里制肮,的某個工廠方法中實例這些實體類時候,返回參數(shù)即可都為接口名综液。
抽象工廠模式總結:
大概流程:在原有的工廠類上加了一個抽象工廠類儒飒。然后根據(jù)工廠生產(chǎn)器這個類對返回某個工廠類的工廠實例。在main()房中,通過工廠生產(chǎn)器獲得相應工廠的工廠實例對象,在通過工廠實例對象進一步去獲取不同工廠的不同實例對象
我的問題:為什么抽象工廠模式中的抽象工廠類不是接口圣猎?
我的問題:這里雖然按照邏輯來說可以是抽象類也可以是接口去約束工廠生產(chǎn)器的行為。但是為什么采用抽象類而不采用接口呢慢显?
我的答案:首先這里,工廠生產(chǎn)器只需要繼承一個父類荚藻,而不需要繼承多個父類洁段,所以工廠類為抽象類的第一原因。再次對于理解上來說祠丝,抽象工廠模式可以說是工廠的工廠,這里抽象工廠類岸蜗,更能表現(xiàn)出這個整體為一個對象。而接口從代碼實現(xiàn)上看和抽象類并無區(qū)別叠蝇,但是接口更能體現(xiàn)的是對某些實體類的約束(如:人們上班璃岳,需要打卡,每個人都需要重寫這個打卡方法)
觀察者模式總結:
大概流程:被觀察者(目標對象)目標類中的成員變量中有個List數(shù)組用于存放觀察者悔捶,而觀察者铃慷,都繼承了一個Observer抽象類,這個抽象類中含有一個被觀察者的成員變量(目標對象)炎功。通過繼承Observer抽象類的子類的實例對象枚冗,在構造函數(shù)中傳入一個被觀察者(目標對象)目標對象實例,將類中的被觀察者變量指向該對象實例蛇损。從而進行綁定被觀察者對象(目標對象)赁温。然后根據(jù)被觀察者對象進行對觀察對象進行添加到List數(shù)組中。當被觀察者調用某個方法時候淤齐,則會通知所有的觀察者對象股囊。
我的問題:為什么使用的是Observer抽象類更啄,而不是Observer接口稚疹?
我的答案:因為在Observer抽象類中,我們可以為這個抽象類添加一些成員變量祭务。而接口則沒有類的性質内狗,不存在成員變量怪嫌。所以在觀察者模式里,我們每個具體的觀察者繼承了Observer抽象類時候對需要一個被觀察者的成員變量柳沙。在這些觀察者的需要進行實例話的時候岩灭,則可以在構造函數(shù)里對這個成員變量進行指向某個被觀察者的實例對象。而這里Observer使用抽象類的好處就是繼承這個類的觀察者類不需要再添加被觀察者這個成員變量赂鲤,更能體現(xiàn)出Observer抽象類與觀察者類的關系噪径,而這里使用接口則只能表示出一種約束關系。
總的來說:設計模式充分發(fā)揮了面向對象編程語言的多態(tài)特性数初。在JAVA語言中找爱,更充分的發(fā)揮了抽象類,和接口的不同作用泡孩。
更能體會到了抽象類和接口的特性车摄。
抽象類:具有類的特性,但是無法進行實例化珍德,提供了抽象方法练般,約束了子類的某些行為(如某個函數(shù)必須重寫)。
接口:接口更像是一種行為的規(guī)范锈候,雖然某種情況和抽象類的作用一樣薄料。但是,抽象類更注重泵琳,類和類之間的關系摄职,和存在的約束。而接口更注重對類的行為約束获列,統(tǒng)一規(guī)則谷市。