程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Helper 類在Java和C++中的設計

Helper 類在Java和C++中的設計

編輯:C++入門知識

<!-- @page { margin: 0.79in } P { margin-bottom: 0.08in } H1 { margin-bottom: 0.08in } H1.western { font-family: "Liberation Sans", sans-serif; font-size: 16pt } H1.cjk { font-family: "AR PL UMing HK"; font-size: 16pt } H1.ctl { font-family: "Lohit Hindi"; font-size: 16pt } -->

Java
有三個選擇

1)采用普通的類

有公有構造函數,沒有成員變量,提供了很多成員函數作為方法,調用代碼如下:

Helper helper = new Helper();

helper.f1();

這種方法的缺點是創建對象的開銷是不必要得,我們知道創建對象意味著,首先要分配內存,然後在該內存上創建對象。在一個大量創建helper對象的場景中,這種負擔是很大的。

2)為了避免這種反復創建對象的開銷,可以采用Singleton延遲創建技術,確保整個進程中只有一個對象,並且只有第一次調用的時候才會被創建出來。

Helper helper = Helper.getInstance();

helper.f1();

這個方法進步很多了,但是仍然有缺點。這會導致系統中有很多Singleton類。其實Singleton主要用在表達系統中唯一存在的對象,通常這些對象都是有狀態的。一個系統設計中過多的為了其他目的而設計的Singleton會讓開發者覺得困惑。

3)普通的類,提供靜態方法訪問,構造函數為私有。同時用final關鍵字修飾class表示不允許被繼承。

Helper.f1();

由於私有構造函數,因此不可以被直接創建對象,也不可以被子類繼承後,然後創建子類對象。如果必要的話,還可在私有構造函數中拋出異常,以防止reflection的攻擊。

我認為這是Java中最好的方案。

C++
同樣的推理,同樣的結論。但是C++中缺少代碼檢查工具,如果忘記將構造函數變成私有,Java的檢查工具通常會提醒。C++只能靠制定編碼規范來解決。而且C++中也沒有final關鍵字來表示類不允許被繼承。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved