- 相關(guān)推薦
Java中類的設(shè)計(jì)技巧有哪些
在Java面向?qū)ο缶幊痰倪^程中,類的設(shè)計(jì)是一個(gè)很有挑戰(zhàn)性的工作,不同的人可能對于類的理解不一樣,設(shè)計(jì)出來的類也可能不一樣,下文yjbys小編為大家分享的是關(guān)于java類的設(shè)計(jì)技巧,希望對大家學(xué)習(xí)java有幫助!
1)一定將數(shù)據(jù)設(shè)計(jì)為私有。
最重要的是:絕對不要破壞封裝性。有時(shí)候,需要編寫一個(gè)訪問器方法或更改器方法,但是最好還是保持實(shí)例域的私有性。很多慘痛的經(jīng)驗(yàn)告訴我們,數(shù)據(jù)的表示形式很可能會改變,但它們的使用方式卻不會經(jīng)常發(fā)生變化。當(dāng)數(shù)據(jù)保持私有時(shí),它們的表示形式的變化不會對類的使用者產(chǎn)生影響,即使出現(xiàn)bug也易于檢測。
2)一定要對數(shù)據(jù)初始化。
Java不對局部變量進(jìn)行初始化,但是會對對象的實(shí)例域進(jìn)行初始化。最好不要依賴于系統(tǒng)的默認(rèn)值,而是應(yīng)該顯式地初始化所有的數(shù)據(jù),具體的初始化方式可以是提供默認(rèn)值,也可以是在所有構(gòu)造器中設(shè)置默認(rèn)值。
3)不要在類中使用過多的基本數(shù)據(jù)類型。
就是說,用其他的類代替多個(gè)相關(guān)的基本數(shù)據(jù)類型的使用。這樣會使類更加易于理解且易于修改。例如,用一個(gè)稱為Address的新的類替換下面的Customer類中的實(shí)例域:
private String street;
private String city;
private String state;
private int zip;
這樣,可以很容易地順應(yīng)地址的變化,例如,需要增加對國際地址的處理。
4)不是所有的域都需要獨(dú)立的域訪問器和域更改器。
或許,需要獲得或設(shè)置雇員的薪金。而一旦構(gòu)造了雇員對象,就應(yīng)該禁止更改雇用日期,并且在對象中,常常包含一些不希望別人獲得或設(shè)置的實(shí)例域,例如,在Address類中,存放州縮寫的數(shù)組。
5)使用標(biāo)準(zhǔn)格式進(jìn)行類的定義。
一定采用下面的順序書寫類的內(nèi)容:
公有訪問特性部分
包作用域訪問特性部分
私有訪問特性部分
在每一部分中,應(yīng)該按照下列順序列出:
實(shí)例方法
靜態(tài)方法
實(shí)例域
靜態(tài)域
畢竟,類的使用者對公有接口要比對私有的實(shí)現(xiàn)細(xì)節(jié)更感興趣,并且對方法要比對數(shù)據(jù)更感興趣。
但是,哪一種風(fēng)格更好并沒有達(dá)成共識。Sun的程序設(shè)計(jì)風(fēng)格建議Java程序設(shè)計(jì)語言先書寫域,后書寫方法。無論采用哪種風(fēng)格,重要的一點(diǎn)是要保持一致。
6)將職責(zé)過多的類進(jìn)行分解。
這樣說似乎有點(diǎn)含糊不清,究竟多少算是"過多"?每個(gè)人的看法不同。但是,如果明顯地可以將一個(gè)復(fù)雜的類分解成兩個(gè)更為簡單的類,就應(yīng)該將其分解(但另一方面,也不要走極端。設(shè)計(jì)10個(gè)類,每個(gè)類只有一個(gè)方法,顯然也太小了)。
下面是一個(gè)反面的設(shè)計(jì)示例。
public class CardDeck// bad design
{
public CardDeck(){…}
public void shuffile(){…}
public void draw(){…}
public int getTopValue(){}
public int getTopSuit(){}
private int[] value;
private int[] suit;
}
實(shí)際上,這個(gè)類實(shí)現(xiàn)了兩個(gè)獨(dú)立的概念:一副牌(含有shuffle方法和draw方法)和一張牌(含有查看面值和花色的方法)。另外,引入一個(gè)表示單張牌的Card類,F(xiàn)在有兩個(gè)類,每個(gè)類完成自己的職責(zé):
public class CardDeck// better design
{
public CardDeck(){…}
public void shuffile(){…}
public void draw(){…}
public int getTopValue(){}
public int getTopSuit(){}
private Card[] cards;
}
public class Card {
public Card(int value,int aSuit){}
public int getTopValue(){}
public int getTopSuit(){}
private int value;
private int suit;
}
7)類名和方法名要能夠體現(xiàn)它們的職責(zé)。
與變量應(yīng)該有一個(gè)能夠反映其含義的名字一樣,類也應(yīng)該如此(在標(biāo)準(zhǔn)類庫中,也存在著一些含義不明確的例子,如:Date類實(shí)際上是一個(gè)用于描述時(shí)間的類)。
命名類名的良好習(xí)慣是采用一個(gè)名詞(Order)、前面有形容詞修飾的名詞(RushOrder)或動名詞(有"-ing"后綴)修飾名詞(例如,BillingAddress)。對于方法來說,習(xí)慣是訪問器方法用小寫get開頭(getSalary),更改器方法用小寫的set開頭(setSalary)。
【Java中類的設(shè)計(jì)技巧有哪些】相關(guān)文章:
java中File類有哪些使用方法03-14
平面設(shè)計(jì)技巧有哪些03-18
演講中的控場技巧有哪些03-08
2017編導(dǎo)類藝考技巧有哪些03-10
平面設(shè)計(jì)學(xué)習(xí)技巧有哪些03-13
兒童房間設(shè)計(jì)技巧有哪些03-15
發(fā)面技巧有哪些03-29
唱歌的技巧有哪些03-14