日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

helper java_Helper 类在Java和C++中的设计

發布時間:2023/12/18 c/c++ 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 helper java_Helper 类在Java和C++中的设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java

有三個選擇

1)采用普通的類

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

Helper helper = new Helper();

helper.f1();

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

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

Helper helper = Helper.getInstance();

helper.f1();

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

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

Helper.f1();

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

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

下面是我的JDBC方面的一個Helper類代碼:

import java.sql.Statement;

import java.sql.ResultSet;

import java.sql.SQLException;

import org.slf4j.Logger;

public final class CloseHelper {

private CloseHelper(){

throw new UnsupportedOperationException("CloseHelper is a helper class,can't be initated");

}

public static void close(ResultSet set , Logger log){

if(set!=null){

try{

set.close();

}catch(SQLException ex){

log.error(ex.getMessage(),ex);

}

}

}

public static void close(Statement statement , Logger log){

if(statement!=null){

try{

statement.close();

}catch(SQLException ex){

log.error(ex.getMessage(),ex);

}

}

}

}

C++

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

總結

以上是生活随笔為你收集整理的helper java_Helper 类在Java和C++中的设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。