免責聲明:這個問題是針對那些誰會考慮斯科特邁耶斯在有效的C++項目23的建議是良好的面向對象設計 - 至少在C + +。更喜歡Java中的非成員非朋友函數?
在Java中,全局函數不存在的地方,起初看起來這個原理不適用,但在我看來它是這樣。以Scott Meyers自己的例子。
public class WebBrowser {
public void clearCache() {}
public void clearHistory() {}
public void removeCookies() {}
}
通過創建包含靜態便捷方法相關聯的「命名空間」級,我已經通過最小化可以訪問它的內部的代碼量增加的WebBrowser
的封裝。畢竟,Java中的靜態方法本質上是全局函數(假定類中的所有內容都是公共和靜態的)。
public class WebBrowserStuff {
private WebBrowserStuff() {} // prevent instantiation
public static void clearBrowser(WebBrowser browser) {
browser.clearCache();
browser.clearHistory();
browser.clearRemoveCookies();
}
}
我能看到的唯一的缺點是,有沒有在java參數相關的查找,所以調用該方法是稍微詳細。
WebBrowserStuff.clearBrowser(browser);
我的問題是,因爲這種使用非成員函數希望在C++(見我的聲明),沒有任何理由,不是增加冗長,你爲什麼不想做這在Java中其他?這個問題具體是關於C++和Java之間關於這種技術的區別。
我聽取您對這個是否是普遍良好的面向對象設計的個人意見,並不興趣,雖然我上午興趣,如果有是C之間的文化差異++和Java可能導致普遍的觀點聽力以一種方式或另一種方式傾斜。
[編輯]
不幸的是,我並沒有真正得到的回答我的問題,我的編輯,試圖使它少的意見爲基礎並沒有被關閉,阻止它,所以我不能選擇一個接受的答案。人們可以把它解釋爲,你真的不想這麼做(假設這是C++的良好實踐),沒有任何技術原因,任何對這種技術的反對都是純粹的個人或文化的Java事物。
這些被稱爲助手類,是非常常見的,通常被認爲是不好的做法。見http://blogs.msdn.com/b/nickmalik/archive/2005/09/06/461404.aspx –