Sun公司對(duì)JavaBean的定義為:可以重復(fù)利用的軟件組件,它在遵循JavaBean技術(shù)規(guī)范的基礎(chǔ)上提供特定的功能,這些功能模塊可以組成更大規(guī)模的應(yīng)用系統(tǒng)。

到底什么是JavaBean?

先看一段代碼:

/**
 * @author yong
 *
 */
public class Add {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		int c;

		c = a + b;
		System.out.println("a+b=" + c);
	}
}


上面的代碼很簡(jiǎn)單,它的功能就是求出ab的和并且輸出。

但是從軟件工程的角度來(lái)看,上面的代碼有一下幾點(diǎn)不足:

可定制性差,如果現(xiàn)在要求其他的兩個(gè)數(shù)相加那么就必須修改程序代碼重新給ab賦值才能完成新的需求。

可維護(hù)性差,整段代碼相互緊扣,如果得不到用戶(hù)想要的結(jié)果那么就不得不從頭到尾進(jìn)行檢查。類(lèi)似于上面的代碼還是很簡(jiǎn)單的,但是如果一個(gè)大型的系統(tǒng)寫(xiě)成上面那樣,如果出了問(wèn)題調(diào)試起來(lái)就非常費(fèi)勁了。

復(fù)用性差,如果系統(tǒng)的不止一個(gè)地方需要用到上面代碼的功能那么就不得不在整個(gè)代碼中寫(xiě)兩邊幾乎完全一樣的代碼。

上面的這些問(wèn)題隨著系統(tǒng)的增大而越發(fā)的明顯,從而上面的代碼的價(jià)值也會(huì)隨著系統(tǒng)的增大而變得越來(lái)越小。

于是JavaBean技術(shù)出現(xiàn)了,簡(jiǎn)單的說(shuō)JavaBean就是普通的java類(lèi),和其他的普通類(lèi)的區(qū)別就在于在遵循JavaBean規(guī)范的前提下對(duì)一些功能進(jìn)行封裝,并對(duì)外界提供可以調(diào)用的方法接口,從而可以提高代碼的復(fù)用性,而且如果程序出問(wèn)題可以很容易的把錯(cuò)誤定位在某個(gè)模塊使程序的調(diào)試、開(kāi)發(fā)的效率提高,同時(shí)也方便了合作開(kāi)發(fā),你一個(gè)Bean我一個(gè)Bean各不干擾。

改造后的代碼:

/**
 * @author yong
 *
 */
public class AddBean {
	private int a;
	private int b;
	//求a,b兩個(gè)數(shù)的和
	public int add(int a,int b){
		return a+b;
	}
	//打印a,b兩個(gè)數(shù)的和
	public void print(){
		System.out.println("a+b="+(a+b));
	}
	//獲取a的值
	public int getA(){
		return a;
	}
	//給a賦值
	public void setA(int a){
		this.a=a;
	}
	//獲取b的值
	public int getB(){
		return b;
	}
	//給b賦值
	public void setB(int b){
		this.b=b;
	}
}


上面的這個(gè)類(lèi)就是一個(gè)簡(jiǎn)單的JavaBean

如此看來(lái)JavaBeanvb6.0當(dāng)中我們把相似的代碼提出來(lái)構(gòu)成一個(gè)過(guò)程的思路異曲同工,甚至可以說(shuō)JavaBean和微軟的com組件是一個(gè)作用的,都是封裝代碼然后供其他的代碼調(diào)用,從而方便開(kāi)發(fā)。

調(diào)用代碼:

/**
 * @author yong
 *
 */
public class Test {
	public static void main(String[] args){
		//新建addbean對(duì)象
		AddBean add=new AddBean();
		//設(shè)置a,b的值
		add.setA(10);
		add.setB(20);
		//調(diào)用AddBean的方法打印a,b的和
		add.print();
	}
}


JavaBean的種類(lèi)

JavaBean大體可以分兩類(lèi):第一類(lèi)是可視化的,第二類(lèi)是非可視化的

可視化JavaBean就是就是帶有界面的java類(lèi),如按鈕,文本框等等類(lèi)似于VB當(dāng)中的控件。只不過(guò)一般情況下在java中我們沒(méi)有像VB中那樣對(duì)控件進(jìn)行拖拖拽拽,但是有些IDE可以實(shí)現(xiàn)和VB類(lèi)似的功能例如JBuilder或者eclipse里面的Swing/Matisse插件等。

非可視化的JavaBean就是沒(méi)有界面的的java類(lèi),例如上面的那段實(shí)現(xiàn)ab求和并輸出的類(lèi)就是一個(gè)非可視化的JavaBean。這些JavaBean把功能進(jìn)行封裝方便其他的類(lèi)的調(diào)用所以在web開(kāi)發(fā)當(dāng)中用到的JavaBean大多是非可視化的JavaBean。

JavaBean的編碼規(guī)則

JavaBean的編碼規(guī)范在sun公司的網(wǎng)站上可以下載到(官網(wǎng)下載的速度有限,現(xiàn)在已將文檔上傳到我的文檔中,需要的童鞋可以去下載),100多頁(yè)的英文PDF文檔相當(dāng)磨練人的耐心,在這里總結(jié)如下幾條。

1、每個(gè)屬性必須有對(duì)應(yīng)的屬性獲取和設(shè)置方法,即每個(gè)屬性必須要提供相對(duì)應(yīng)的個(gè)gettersetter方法。

2、如果一個(gè)屬性的類(lèi)型為boolean類(lèi)型,則屬性對(duì)應(yīng)的獲取和設(shè)置方法就有所不同,例如某個(gè)boolean類(lèi)型的屬性名為isLuck那么相對(duì)應(yīng)的屬性獲取方法為isLuck()屬性設(shè)置方法為setLuck()。

3、所有屬性最好是私有變量,即各個(gè)類(lèi)的屬性最好設(shè)置為private,對(duì)屬性的取值和賦值操作要通過(guò)對(duì)應(yīng)的取值賦值方法進(jìn)行

4、所有的方法要設(shè)置為共有方法,即所有方法要設(shè)這為public

以上總結(jié)的幾條就是編寫(xiě)非可視化JavaBean需要遵循的編碼規(guī)范,只有這樣別的開(kāi)發(fā)者才能方便的調(diào)用JavaBean中提供的功能方法。

為什么屬性都要設(shè)置成私有,方法都要設(shè)置成共有呢?

作者:beijiguangyong 發(fā)表于2012-2-24 23:11:27 原文鏈接
閱讀:1006 評(píng)論:6 查看評(píng)論