首頁  >  文章  >  Java  >  提高java程式碼的重用性

提高java程式碼的重用性

angryTom
angryTom原創
2019-07-16 17:35:182095瀏覽

提高java程式碼可重用性有哪些方法措施,以下就講解了三種關於提高java程式碼可重用性的措施,一起來了解吧~

一、改寫類別的實例方法

透過類別繼承實作程式碼重複使用不是精確的程式碼重用技術,因此它並不是最理想的程式碼重用機制。繼承總是帶來一些多餘的方法和資料成員,它們總是使得重用類別裡面某個方法的程式碼變得複雜。

另外,衍生類別對父類別的依賴關係也使得程式碼進一步複雜化:對父類別的改變可能影響子類別;修改父類別或子類別中的任意一個類別時,我們很難記得哪一個方法被子類別覆寫、哪一個方法沒有被子類別覆寫;最後,子類別中的覆寫方法是否要呼叫父類別中的對應方法有時並不顯而易見。

任何方法,只要它執行的是某個單一概念的任務,就其本身而言,它就應該是首選的可重複使用程式碼。為了重複使用這種程式碼,我們必須回歸到過程導向的程式模式,把類別的實例方法移出成為全域性的過程。

為了提高這個過程的可重複使用性,過程程式碼應該像靜態工具方法一樣寫:它只能使用自己的輸入參數,只能呼叫其他全域性的過程,不能使用任何非局部的變數。這種對外部依賴關係的限制簡化了過程的應用,使得過程能夠方便地用於任何地方。

當然,由於這種組織方式總是使得程式碼具有更清晰的結構,即使是不考慮重用性的程式碼也同樣能夠從中獲益。

在Java中,方法不能脫離類別而單獨存在。為此,我們可以把相關的過程組織成為獨立的類,並把這些過程定義為公用靜態方法,在組織和封裝物件資料成員的過程中,類別起到了不可或缺的作用,類別透過多重介面實現多態性的能力本身也帶來了卓越的程式碼重用支援。

二、選擇最簡單的參數介面類型

#描述參數物件要求的介面越簡單,其他類別實作該介面的機會就越大,由此,其物件能夠作為參數使用的類別也越多。從下面這個範例可以很容易看出這一點:

static public boolean areOverlapping(Window window1, Window window2) {...}

##這個方法用來檢查兩個視窗是否重疊。如果這個方法只要求從參數獲得兩個視窗的矩形座標,此時相應地簡化這兩個參數是一種更好的選擇,有些時候可能會出現描述參數需求的介面擁有太多方法的情況。

此時,我們應該在全域名稱空間中定義一個新的公共介面供其他面臨相同問題的程式碼重複使用。當我們需要像使用C語言中的函數指標一樣使用參數時,創建唯一的介面描述參數需求是最好的選擇。例如,假設有下面這個過程:

static public void sort(List list, SortComparison comp) {...}

該方法運用參數中提供的比較物件comp,透過比較給定列表list中的物件排序list列表。 sort對comp物件的唯一要求是要呼叫一個方法進行比較,因此SortComparison介面不能在其他地方重複使用。

三、把參數型別改成介面

在物件導向程式設計中,程式碼重複使用真正的重點在於透過介面參數型別利用多態性,而不是透過類別繼承,我們透過對介面而不是對類別程式達到程式碼重用的目的。如果某個方法的所有參數都是對一些已知接口的引用,那麼這個方法就能夠操作這樣一些對象,當我們寫方法的程式碼時,這些對象的類別甚至還不存在。從技術上來說,可重用的是方法,而不是傳遞給方法的物件。

例如,讓我們假設有這樣一個方法:

static public boolean areAnyOverlapping(Collection rects) {...}

該方法用於檢查給定集合中的任意矩形物件是否重疊。在這個方法的內部,當我們用循環依序存取集合中的各個物件時,如果我們不能把物件cast成為Rectangular之類的介面類型,又如何能夠存取物件的矩形區域呢?唯一的選擇是把物件cast成為它特有的類別形式,它意味著方法必須事先知道它所操作的物件類型,這使得方法的重用只限於那幾種物件類型。

了解更多相關知識可以點選:

java教學

以上是提高java程式碼的重用性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn