mvc模式中dao層裡往往有個范型抽象類

2022-02-16 05:10:07 字數 4917 閱讀 1751

1樓:匿名使用者

你的意思是不是為什麼不直接來個userdaoimpl,而非要加個userdao 介面?

這樣好處是可以遮蔽實現層,比如你現在用hibernate實現dao,後來改用ibatis,那麼只要替換impl的類就可以,而不用改動其他。

另外乙個是,dao介面屬於m層,它不應該知道如何去實現資料的持久以上僅是我個人看法,不對的地方歡迎指教。

2樓:

就 private userdao = new userdaoimpl()而言,因為userdao是個介面,它不能直接例項化,而是userdaoimpl是個類,它可以例項化,至於為什麼用userdaoimpl例項化userdao?因為userdaoimpl實現了這個介面,父類的物件可以引用子類的物件即物件上轉。

可能你覺得這樣很麻煩嗎,直接用實現類不就行了嗎,即不用介面,例項化的時候也方便,隨著你的深入學習,到了一定層次後,你就會有很深的關於面向介面程式設計的體會。

3樓:匿名使用者

一般有個userdao介面,乙個實現類。就是面向介面程式設計。

userdao userdao= new userdaoimpl();

4樓:在沔陽古城打羽毛球的甄姬

首先,dao只是一種命名習慣問題,一般mvc中的m層都是這個命名,userdao肯定就是涉及到對使用者的操作的方法介面的集合,也就是dao是個介面:一系列方法的集合,只寫方法名,而不用實現。 userdaoimpl,就是對dao方法的實現,這是分層的思想,降低耦合。

對於這句**,就是乙個宣告,模擬物件的例項化,這是介面的例項化,也就是新宣告乙個userdao,他可以呼叫userdaoimpl中的所有方法。 如果單純的寫userdao userdao=new userdao();是錯誤的,也是沒有意義的,因為userdao是乙個介面。

請問j**a中,抽象類裡的抽象方法都要在它的子類中全部實現嗎?能不能有些抽象方法不實現?

5樓:志當存高遠

你只要記得介面就是乙個特殊的抽象類。琺怠粹幹誄妨達施憚漸實現它的類它必須對其所有方法進行重寫。

介面是個比較抽象的東西。它一般來說可看作是1個功能擴充套件的類。比如你已經寫好了1個類。

而且也已經寫好了所有的方法通俗點說就是實現了所有的功能。但現在如果又要多增加個功能。而又不想修改源**的情況下。

你就可以考慮實現介面。介面裡寫要增加的方法(功能)。讓你這個類實現它。

你就必須重寫了這個方法。

有時候介面也可以看作是實現它的類的父類

6樓:匿名使用者

凡是實現類必須要完整的重寫所有的方法。(實現類!)部分不重寫的話子類只能也是抽象類。。直至。。。。所有抽象方法被全部重寫為止。

7樓:我才是淡淡

可以,不過這樣的話子類還是乙個抽象類

8樓:

自己demo乙個比較來得快

乙個j**a抽象類實現乙個介面時,是否必須覆蓋介面中所有的方法?

9樓:匿名使用者

是的,只要bai該類實現乙個介面就du必須實現該zhi介面的所dao有方法..

哦...補充下,就如版樓下說的權,

[抽象類可以不實現介面的方法,但該類必須宣告為抽象類,讓他的子類來實現. 如果他的子類還是抽象類那就再由子類的子類去實現,直到繼承該類的類不是抽象類為止.]前提是所繼承該類的派生類是不是抽象類來衡量是否需要實現介面的方法.

10樓:匿名使用者

樓上的,你說:只要該類實現乙個介面就必須實現該介面的所有方法..。他本身就是乙個抽象類,根本就不需要實現該介面裡的方法,讓他的子類去實現就行

11樓:匿名使用者

抽象類可以不實現,但必須宣告為抽象方法,讓他的子類來實現.

12樓:匿名使用者

其實介面是抽象類

copy的變體。一般來說不會用抽象類去實現介面。因為能夠定義在介面中的方法,一樣能寫在抽象類裡,所以為什麼需要去實現呢。

但作為乙個類,即使是抽象的,一旦實現了介面,就必要實現介面中的所有方法。但同時也要確保抽象類中存在抽象方法。

你可以寫個簡單程式驗證。

j**a中繼承抽象類和繼承普通類有什麼區別?

13樓:大時代暑

抽象類體現的的就是一種模板模式的設計。抽象類是從多個具體類中抽象出來的父類。從多個具有相同特徵的類中抽象出乙個抽象類,以這個抽象類作為其子類的模板,從而避免了子類設計的隨意性。

如果編寫乙個抽象父類,父類提供了多個子類的通用方法,並把乙個或多個抽象方法留給其子類實現,這就是一種模板模式。模板模式也是最常見,最簡單的設計模式之一。

這就是抽象類的作用,明白了這個,我想**就不用寫了吧。

14樓:匿名使用者

這個沒**能解釋的。

這個問題還可以擴充套件為,為什麼要有private、public之分呢……

這些概念的提出是為了幫助你建立良好的程式設計思想和規範,便於開發和後續維護。

15樓:尋找卡恩

比如說動物這個抽象類,它可以有吃或者運動的方法,但是不能有方法體,因為動物有好多種,不知道它吃什麼怎麼運動,派生出子類bird就可以寫方法體了,它吃蟲子,飛行。就這樣。。。

j**a中抽象類的存在有什麼意義?

16樓:匿名使用者

抽象類將事物的共性的東西提取出來,抽象成乙個高層的類。子類由其繼承時,也擁有了這個超類的屬性和方法。---也就實現了**的復用了。

子類中也可加上自己所特有的屬性和方法。----也就實現了多型

假如有兩個程式設計師,兩個在兩個程式裡都要用到一種功能,比如要取乙個物件名。

甲自己做了乙個方法叫getname,乙也作了乙個方法叫qumingzi。如果兩個人要去看對方的程式,那麼這個方法要讀懂是不是要有乙個過程?

如果在公司裡,有個抽象類,離面有個抽象方法較getname,公司規定,凡遇到這樣的問題就實現這個方法。那麼這兩個人要讀對方的**是不是就容易了??

假如很多人要買水果吃,吃的動作只有乙個,但是有的人要用現金買,有的人用信用卡,有的人賒帳。要為每個人定義乙個類,就要定義多個相同的吃的方法。如果定義乙個抽象類,在裡面實現吃的方法,再做乙個買的抽象方法。

那每個人的類都從這個抽象類派生下來,只要實現買的方法即可,吃的方法就可以直接用父類的方法了。如果要改吃的方法就不用改多個,只要改這個抽象類裡的就行了。

17樓:譚加巧

相當於普通類和介面的綜合體,你可以在裡面定義實現了的方法和未實現需要繼承去實現的抽象方法。就相當於乙個存放了可以直接使用的物品和未使用的模具的容器。

18樓:匿名使用者

繼承除了可以復用已經實現的方法外,還有乙個很重要的作用:多型!

舉個例子,你有乙個方法,需要根據傳遞引數的不同,而返回不同的結果:

action(bird bird)    //結果是飛action(man man)    //結果是走action(fish fish)    //結果是遊如果它們都繼承自乙個類animal,那麼這個方法只寫乙個就可以了:

action(animal animal) //根據多型,結果是子類的實現

j**a web專案中dao的介面,實現類和service介面,實現類區別

19樓:匿名使用者

dao是資料訪問層,用來儲存資料。

service是業務邏輯處理的。

我們開發程式的目的是為了完成業務功能, 理想的情況下程式中的每一條語句都應該是與業務直接相關的, 例如程式中不應該出現連線資料庫, 讀取某個欄位等純技術性的操作, 而應該是得到使用者a的基本資訊等具有業務含義的操作. dao(data access object)層存在的意義在於將與資料持久化相關的函式呼叫剝離出去, 提供乙個具有業務含義的封裝層. 原則上說, dao層與utils等幫助類的功能非常類似, 只是更加複雜一些, 需要依賴更多的物件(如datasource, sessionfactory)等.

 如果不需要在程式中遮蔽我們對於特定資料持久層技術的依賴, 例如遮蔽對於hibernate的依賴, 在dao層我們沒有必要採用介面設計. 一些簡單的情況下我們甚至可以取消整個dao層, 而直接呼叫封裝好的一些通用dao操作函式, 或者呼叫通用的entitydao類等.

程式開發的過程應該是從業務物件層開始的, 並逐步將純技術性的函式呼叫剝離到外部的幫助類中, 同時我們會逐漸發現一些業務操作的特定組合也具有明確的含義, 為了呼叫的方便, 我們會把它們逐步補充到service層中. 在一般的應用中, 業務邏輯很難穩定到可以抽象出介面的地步, 即乙個service介面不會對應於兩個不同的實現, 在這種情況下使用介面往往也是沒有必要的.

在使用spring的情況下原則上應該避免使用getbean的呼叫方式, 應該盡量通過注入來獲得依賴物件, 但有時我們難免需要直接獲取業務物件, 在不使用介面的情況下可以採用如下方式

class taskservice

}在程式中我們可以直接使用taskservice.getinstance()來得到taskservice物件.通過命名規範的約定, 我們可以從類名推導出spring配置檔案中的物件名, 因而不需要使用乙個額外的硬編碼字串名.

20樓:匿名使用者

你這是沒涉及到快取,如果涉及到的話,service還有對快取的操作,這樣service可以把對快取和db的操作封裝起來,是的你在上層呼叫時更清晰。如果只涉及dao,service的意義確實不大。

21樓:匿名使用者

當然有好處了,現在你感覺多此一舉是因為需求業務少,若是乙個大專案要大量的需求,如果寫在乙個service裡到時會很亂的,寫在乙個dao類裡,可以更清晰更加條理,現在要養成習慣,在工作時會明白的!

C在開發中工廠模式在三層裡怎麼用的

抽象工廠模式向客戶端提供乙個介面,使得客戶端在不必指定具體型別的情況下,建立多個產品族中的物件。本文採取的仍然是接著以前的那個快餐店的例子。現在,快餐店經常良好,逐漸發展壯大,為了適合不同地方人的飲食習慣,建立了兩大系列 相當於產品族 快餐,北方系列和南方系列。每個系列分別由乙個大廚掌勺。抽象工廠模...

oopo手機裡的照相機中的專業模式的每個數字代表了什麼

照相機是一種利用光學成像原理形成影像並使用底片記錄像像的裝置,是用於攝影的光學器械。在現代社會生活中有很多可以記錄像像的裝置,它們都具備照相機的特徵,比如醫學成像裝置 天文觀測裝置等。oopo手機開機顯示colros模式是什麼原因 oopo手機怎麼解鎖 用手解鎖唄,你這問題也太敷衍了吧,麻煩你問乙個...

nba2k9裡街頭模式中怎麼玩花招翱

shift加上enter一起按再按傳球鍵就做出來了,但是只能在街球模式裡使用!背打和加速一起按,再按胯下運球,跟放向鍵也有關係。nba2k9裡面怎麼呼叫戰術 空接 背打 花樣過人 1 你最好先去練習模式裡試一下常用的戰術 戰術單出來了就可以按鍵選戰術 我記得好像 胯下運球,蓋帽,搶斷,普通投籃 這4...