給JAVA設(shè)計開發(fā)新手的一些建議與意見(3)
發(fā)表時間:2024-05-23 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]【空接口的使用】 在接口使用的時候,空接口有2種情況: 1。類似Cloneable,Serializable,他們往往是做一個標(biāo)記,表示需要某個功能。當(dāng)然你也可以這么用,來表示你的類具有某個功能,實現(xiàn)了你的某個接口。 2。你的接口繼承了別的接口(非空),你的接口本身沒有聲明函數(shù)。這種情...
【空接口的使用】
在接口使用的時候,空接口有2種情況:
1。類似Cloneable,Serializable,他們往往是做一個標(biāo)記,表示需要某個功能。當(dāng)然你也可以這么用,來表示你的類具有某個功能,實現(xiàn)了你的某個接口。
2。你的接口繼承了別的接口(非空),你的接口本身沒有聲明函數(shù)。這種情況一般是你不希望用戶使用父接口來作為參數(shù)類型,因為他們的用途可能不同,此時就可以用空接口來實現(xiàn)。
第一種情況我們不再多說,搜索一下關(guān)于Cloneable,Serializable的文章就會了解很多。
我們來看下面的代碼:
public interface Text
{
String getText();
}
public interface SqlText extends Text
{
}
可以看到,Text接口是用于返回一個字符串。而SqlText是一個空接口,它繼承了Text接口。也就是說SqlText也是一種Text。但是我們可以知道,任何一個字符串不一定是Sql字符串,所以此時聲明了一個SqlText接口來用于表名當(dāng)前的字符串是一個Sql字符串。你的函數(shù)可以這樣聲明:
public void doQuery(SqlText aSqlText)
而不是這樣
public void doQuery(Text aText)
避免用戶產(chǎn)生歧義的想法,一眼看去,就明白應(yīng)該傳入一個Sql字符串。
【繼承層次過多】
一般來說,繼承的層次不要過多,否則使用者可能會討厭,找一個函數(shù)會很麻煩。很多Java語言檢查工具都建議你的繼承層次不要超過3層。
【Has A ,Is A,不要濫用繼承】
"我是一個Mp3","我有一個Mp3",其實很容易分辨。但是在實際應(yīng)用中,往往存在把"我有一個Mp3"的情況當(dāng)作"我是一個Mp3",或者是為了偷懶方便而放松了對自己的要求,甚至還沾沾自喜,感覺找到一個捷徑。(scud以前也干過這種事情)。
以前我曾經(jīng)這樣干過:我的邏輯類直接繼承了我的數(shù)據(jù)庫訪問類,這樣我可以直接在邏輯類里面訪問:
public MyLogic extends MyDBA
aLogic。getInt("click");
aLogic。getString("name");
看起來是非常方便,但是你的邏輯類就牢牢綁在了DBA上,是一種非常不好的做法,F(xiàn)在我這樣聲明:
public MyLogic
MyDBA adba;
adba。getInt("click");
adba。getString("name");
其實代碼改動不大,但是你的邏輯類不在牢牢綁在DBA身上了,何樂而不為。
其實這種現(xiàn)象在開發(fā)人員中間可能經(jīng)常見到,我們要盡量避免。下面再來看一個例子:
//一個保存分頁信息的類
public class PageInfo
{
private int page;
private int pageCount;
private int recPerPage;
private int recCount;
//get,set method list。。。
}
一般的情況是,在Dao中進行分頁查詢,計算總記錄,總頁數(shù)等等,所以需要把PageInfo傳給Dao。而在邏輯類中,把傳回來的分頁信息數(shù)據(jù)推到FormBean或者是Action中。
也許你會這么想,如果我的Action或者FormBean繼承了PageInfo,豈不是要省很多事。
千萬別這么干。并不是所有的動作都需要分頁信息,你的FormBean和PageInfo沒有繼承的關(guān)系。也就是說FormBean Has A PageInfo,但是不是Is A PageInfo。