我試圖設計「網絡連接」,以便於使用從服務器檢索數據。但是,我面臨着設計問題。面向對象的結構設計
我NetworkUtil
類,我將使用被設計爲
class NetworkUtil
public NetworkUtil(URL, resultType); // resultType might be XML or RAW
public setListener(listener); // listener will notice when result has arrive
public addPostData(key, value);
public connect(); // connect start new thread, so result will shown in listener
interface NetworkUtilListener1
public onNetworkFail();
public onNetworkSuccess(URL, resultType, xml, raw);
interface NetworkUtilListener2
public onNetworkFail();
public onNetworkSuccessRAW(URL, resultType, raw);
public onNetworkSuccessXML(URL, resultType, xml);
一旦到達結果,我會檢查與resultType並從參數中使用的結果。然而,在上面的兩個示例(NetworkUtilListener1
和NetworkUtilListener2
)中,當更多resultType
即將推出時(例如JSON,圖像甚至我的自定義類型),我會考慮將來使用該問題,因此我的團隊可以輕鬆使用它。
NetworkUtilListener1
將有長期未使用的參數一樣
onNetworkSuccess(URL, resultType, raw, xml, json, image);
這不是一個好的設計,因爲我以爲。
NetworkUtilListener2
將強制使用它的具體類有很多空方法,因爲大多數時候我們只在每個項目上只使用1或2類結果。
onNetworkSuccessRAW(URL, resultType, raw);
onNetworkSuccessXML(URL, resultType, xml);
onNetworkSuccessJSON(URL, resultType, json);
onNetworkSuccessImage(URL, resultType, image);
任何人都可以給我一些幫助,重新設計這個類的結構或向我推薦我需要關注的設計模式。所以我可以有更好的NetworkListener
。
感謝您的回答,但我認爲您的解決方案與NetworkUtilListener2出現同樣的問題 - 具體類(您的情況爲SampleListener)需要實現大量空方法。但是,從你的代碼中,我想出了一個想法。如果我使用類而不是接口來監聽器真正的concreate類不需要從接口獲得所有的功能。但我仍然不確定這是個好主意。 – Chetchaiyan
@Chetchaiyan訪客模式有許多優點,您應該考慮。關於需要通過設計來實現許多方法,因爲您的代碼是關於分別處理每種類型的結果的。但是,您可以定義一個含有所有方法的空白實現的抽象類(即NetworkUtilsAdapter)(類似於某些Java Swing偵聽器中使用的策略[即WindowAdapter])。然後,您的實際監聽器實現可以簡單地擴展此抽象適配器並實現您感興趣的特定方法。 –