我的應用程序與靜態方法這是負責顯示通知和可選發送電子郵件時,事情已經發生了一個工具類:實用工具類的靜態方法和繼承
public static void sendEvent(final String description, final String name) {
....
SmtpParms smtpParams = readSmtpParms();
....
}
private static SmtpParms readSmtpParms() {
// read from properties file
....
}
我們的代碼庫的兩個應用程序之間共享。應用程序A從屬性文件中讀取SMTP參數。我主要工作在應用程序B上。應用程序B並未使用此電子郵件功能,但仍然撥打電話在我們的GUI上顯示事件通知。現在應用程序B需要從數據庫中讀取SMTP參數。
我想重複使用現有的代碼,但由於這些方法是靜態的,我不能僅僅繼承這個實用類並將所有的應用程序B代碼指向子類。該實用程序在多個JAR中引用,我傾向於儘可能少地改變代碼的解決方案。
我認爲如果我可以將readSmtpParms
分隔成一個單獨的類,這可能會有所幫助。但我想不出一種方法來將源(屬性文件與數據庫)傳遞給實用程序類實例,而不更改sendEvent
的方法簽名。我想另一種方法是創建另一種方法sendEventUsingDatabase
,但是我仍然需要更新應用程序B代碼中所有對sendEvent
的引用。
有沒有解決方案不會改變原來的代碼,但也不會重複代碼?此代碼是否符合設計模式或反模式?謝謝。
即使只有「一種行爲」,仍然會有這些方法在其他參數上運行的數據,因此它們不應該是靜態的。 – 2011-05-17 20:16:30