Android 工具類的兩種寫法---單例模式與靜態方法
第一種:單例模式 方法非靜態
public class LogUtil {
private static volatile LogUtil instance;
private LogUtil(){};
/**
* 單例模式 獲取例項方法
* @return
*/
public static LogUtil getInstance(){
if (instance == null){
synchronized (LogUtil.class){
if (instance == null){
instance = new LogUtil();
}
}
}
return instance;
}
/**
* 列印日誌測方法
* @param content
*/
public void print(String content){
Log.i("tag",content);
}
}
第二種:靜態方法 無需例項化
public class LogUtil2 {
/**
* 列印日誌測方法
* @param content
*/
public static void print(String content){
Log.i("tag",content);
}
}
區別分析:
(1)使用方式的區別
第一種使用方法 :LogUtil.getInstance().print("test");
第二種使用方法 :LogUtil2.print("test");
(2)記憶體消耗的區別
第一種使用方法 :在堆中建立了例項加上靜態變數的引用,只要app不銷燬就會常駐記憶體。
第二種使用方法 :在程式啟動時就分配了靜態區域的記憶體,也會常駐記憶體。
(3)效率方面
第二種使用方法的效率會略高一些,靜態的方法是被共享的,可以直接呼叫。
如何選擇:
靜態方法適合去完成一個獨立的封閉的功能,所以如果方法中不需要維持一些外部的狀態值,可以用靜態方法的方式,否則做成單例的方式。
除了外部狀態值的這種情況,個人認為這兩種方式均可,無傷大雅。
對外部的狀態值的舉例:
例如在工具類裡面有一些成員變數,假如有個boolean值,你的方法中需要判斷或改變這個值,這種情況就是有外部狀態的情況。
相關推薦
Android 工具類的兩種寫法---單例模式與靜態方法
第一種:單例模式 方法非靜態 public class LogUtil { private static volatile LogUtil instance; private Lo
單例模式與靜態成員
很好 nullptr () 單例 配置 ora pri 文件 初始 高博的《視覺SLAM十四講》中,project裏的Config類,很好的示範了單例模式的實現與static靜態成員的使用 每天早上起床拜一拜高博~ Config類是為了設置配置文件,並且從配置文件中讀取預設
程式設計之單例模式VS靜態方法
原文:https://blog.csdn.net/johnny901114/article/details/11969015?utm_source=copy 我們在設計程式經常會有這種需求 , 某個類裡的方法能夠全域性訪問. 在這種情況下有兩種實現方案 : 1>
三種單例模式與Object祖先類
三種單例模式 object 單例有三種模式,懶漢式,餓漢式,和優化後的懶漢式 餓漢式單例模式: 餓漢式就像饑餓的人一樣先把事情都提前準備好,因為它是先在靜態屬性裏先提前構建好對象,然後再用靜態方法將對象返回出去,所以會提前占用資源,但是速度比較快。例如:懶漢式單例模式: 懶漢式就像懶人一樣要等到事
HttpUrlConnection+圖片載入+工具類+介面回撥+單例+AsyncTask封裝工具類
1.MainActivity頁面 package com.example.httpurlconnection; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import andro
android SplashActivity的兩種寫法
記錄SplashActivity的簡單用法,重要在思路 倒計時式(在UI顯示倒計時) 使用靜態處理和弱引用的方式防止記憶體洩漏 處理器的SendMessage函式傳送第一次訊息(索引) 之後再的handleMessage中接受並處理訊息(再次傳送,一個迴圈進行的)和UI更新 im
JdbcUtil工具類兩種實現方式
1.首先我們需要匯入3個包(mvnrepository.com搜這個網址下載)commons-dbcp-1.2.1.jar(apache 上的一個 java 連線池專案,也是 tomcat 使用的連線池元件)commons-pool.jar(連線池jar包)mysql-con
建立類設計模式(5種)——單例模式
建立類設計模式(5種)——單例模式 目錄 建立類設計模式(5種)——單例模式 一、匯流排 二、單例模式 三、單例模式的優點和應用 四、單例模式的缺點 一、匯流排 匯流排是計算機各種功能部件或者裝置之間傳送資料、控制訊號等資訊的公共通訊解決方案之一。現假設有如下場景
android studio 測試兩種測試用例的切換問題
Android Studio 1.5建立的工程,會生成兩個預設的測試目錄:test, androidTest,其中, test目錄為在本機執行單元測試程式碼的目錄, androidTest為在Android裝置上執行單元測試程式碼的目錄。 目錄如下圖所示: 對於新建的工程,預設會生成相應的測試程式
python中7種實現單例模式的方法:staticmethod、classmethod、類屬性方法、__new__、裝飾器、元類、名字覆蓋
本文的以下實現方法為了簡單起見不考慮執行緒安全。 一:staticmethod 程式碼如下: class Singleton(object): instance = None def __init__(self): raise Syntax
Python新式類 單例模式與作用域(四)
如果 要求 pass 原型 參數 outer 語句 可選 被調用 1 新式類與舊式類 新式類擁有經典類的全部特性之外,還有一些新的特性,比如 __init__發生變化,新增了靜態方法__new__,python3目前都采用新式類,新式類是廣度優先,舊式類是深度優先 #新式類
單例模式和靜態類的區別對比
什麼是單例模式 單例模式指的是在應用***整個生命週期內只能存在一個例項。***單例模式是一種被廣泛使用的設計模式。他有很多好處,能夠避免例項物件的重複建立,減少建立例項的系統開銷,節省記憶體。 單例模式和靜態類的區別 首先理解一下什麼是靜態類,靜態類就
單例模式的四種方式 單例模式的四種方式
單例模式的四種方式 一、內容 保證一個類只有一個例項,並提供一個訪問它的全域性訪問點 二、角色
Android設計模式 單例模式(靜態內部類單例模式)
DCL雖然在一定程度上解決了資源消耗、多餘的同步、現成安全問題,但是還是在某些情況下會出現失效問題。成為雙重檢查鎖定(DCL)失效。 建議使用如下程式碼: package demo; publ
JAVA三種實現單例模式方法(二):使用靜態內部類實現單例設計模式
靜態程式碼塊和靜態內部類的載入順序:當呼叫外部類的建構函式是,外部類的靜態程式碼塊同時被載入,但是其內部類不會同時被載入;當且僅當內部類的靜態域或其構造方法或其靜態方法被呼叫時,內部內才被載入。 因此,通過內部內實現單例,就能實現延遲載入。 這個解決方案被稱為Lazy i
單例模式中靜態類成員變數初始化問題
最近做一個專案,C++語言,使用到了單例模式做設計。在具體編寫程式碼時,使用了靜態成員變數和靜態函式。程式碼如下: class Camera { private: //(省略若干程式碼) static Camera* pCamera ; //(省略若干
單例模式和靜態類的區別(Difference between static class and singleton pattern)
csdn就當自己的記事本了 這個問題的答案引用Jon Skeet 回答 首先明確的是兩個都是執行緒安全的,兩者間最大的區別就是單例可以實現介面 (Ps: 或者繼承基類,雖然這種方式很少見
關於防盜鏈兩種寫法:referer.contains();與referer.startsWith();
關於防盜鏈有兩種寫法: 程式碼一:referer.contains();------我覺得該方法不是十分規範,因為只要包含對應的關鍵資訊就行,但它並不是以什麼資訊為開頭。 程式碼二: referer.startsWith();------我覺得該方法比較規範,驗證以什麼
Java五種單例模式與執行緒安全
單例模式是一種常用的軟體設計模式,常被用於一個類在系統中最多隻允許存在一個例項的場合,如視窗管理器、列印緩衝池、檔案系統等。在單例模式的核心結構中,只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類只有一個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類
Java設計模式(二):單例模式的5種實現方式,以及在多執行緒環境下5種建立單例模式的效率
這段時間從頭溫習設計模式。記載下來,以便自己複習,也分享給大家。 package com.iter.devbox.singleton; /** * 餓漢式 * @author Shearer * */ public class SingletonDemo1 {