java工具類編寫思考
初衷
這篇部落格的初衷是因為我想寫一個工具類,同時對工具類做出一些規範以及優化。
規範
- 工具類定義為
final class
,考慮到工具類應該不能被繼承 - 工具類的命名應該用
Util
結尾,例如LogUtil
- 工具類的構造方法應該首選是
private
的,同時工具類的工具方法為static
的 - 工具類使用單例模式,或者
static
初始化某個單例。這個規範是因工具的不同而不同的,例如我要寫一個gson
的工具類,不應該在每個方法裡都new Gson()
再進行操作,如果一個類大量呼叫GsonUtil
,那就會大量建立gson
物件。
針對第四種,給點示例程式碼,首先是靜態塊初始化方式:
public final class GsonUtil {
private static Gson gson = null;
static {
if (gson == null) {
gson = new Gson();
}
}
private GsonUtil() {
}
}
然後是單例模式初始化方式:
public final class GsonUtil{
private static volatile Gson gson;
private static Gson initInstance(){
if(gson == null){
synchronized(GsonUtil){
if(gson == null){
gson = new Gson();
}
}
}
}
private GsonUtil() {
initInstance();
}
}
擴充
上面是我自己思考的,然後我又看了一些其他資料,主要是說:
編寫工具類倆種方式:
一:
1.工具方法都設為非static方法
2.將工具類設計為單列模式
3.注意這種方式需要獲取工具類物件(例項化)才能呼叫方法
二:
1.工具方法設計為static方法
2.工具 類所有構造方法都設計為private修飾
3.工具類本身以abstract修飾(目的就是隻能用類呼叫方法,不能例項化)
說靜態類好的:
靜態類不用引用就能呼叫,而單例需要有物件的引用,因此節約資源(我覺得這個影響微乎其微,可以忽略)
靜態類方便,隨處可用;而單例必須有引用,需要注入或者new(是有點麻煩,我上次寫靜態類也是因為這個原因)
說單例好的:
單例模式的類是普通的類,它具有物件導向的特性,方便擴充套件
對於有配置的工具類,可以輕鬆的建立多個不同配置的單例物件(想起我主導的另一個專案就存在5-6個redis資料來源,如果使用靜態類就是災難)
因此,得出以下結論:
如果沒有配置資訊的工具類,當然是靜態類好,隨處呼叫,不需引用爽得不要不要的。比如Math.abs(),如果寫個單例,可能全世界都要笑話你了。
如果有配置資訊的工具類,最好還是使用單例模式吧,這樣以後如果有多個資料來源,你會感謝你自己。
區別
我在靜態方法裡使用的單例模式,不是指的是我的工具類作為單例,而是第三方的類。
如有錯誤請指正。
相關文章
- java工具類之編碼轉換工具類Java
- 萬能java字串編碼轉換工具類Java字串編碼
- 編寫表DAO類
- Java程式編寫Java
- Java —— 集合工具類(Collections 類)Java
- Java 工具類庫Java
- java http 工具類JavaHTTP
- java Redis工具類JavaRedis
- JAVA-java日期工具類Java
- java反編譯工具Java編譯
- 近期求職關於簡歷編寫的思考求職
- java時間工具類Java
- Java之Collections工具類Java
- Java容器工具類ArraysJava
- 手寫一個LRU工具類
- java ftp工具類,帶你領略5款不同的java ftp工具類JavaFTP
- java 常用工具類Java
- java Freemarker 模版引擎工具類Java
- java安全編碼指南之:方法編寫指南Java
- 編寫一個介面壓測工具
- Java編寫定時任務Java
- 【Java】手工編寫JavaWeb專案!JavaWeb
- 2.09 java編寫智慧合約Java
- 如何編寫第一個 ngrx Effect 類
- Android多程式之手動編寫Binder類Android
- 字串值提取工具-04-java 呼叫 java? Janino 編譯工具字串Java編譯
- Java類轉位元組碼工具Java
- java 檔案處理 工具類Java
- java8特性 Optional 工具類Java
- 排名前16的Java工具類Java
- Hutool—好用的 Java 工具類庫Java
- Java併發系列—工具類:SemaphoreJava
- OmniOutliner 5 Essentials for Mac(大綱編寫工具)Mac
- 拖拽編寫SVG圖形化工具(二)SVG
- 用PYTHON初次編寫小工具心得Python
- workist - node編寫的小巧的效率工具
- SpringBoot整合Redis及Redis工具類撰寫Spring BootRedis
- 用 GoLang 編寫類似 Apache Camel 路由引擎GolangApache路由