單例模式進一步講解

2021-08-01 04:01:32 字數 892 閱讀 2954

public class single

public static single getinstance()

} 上下兩個static可以去掉嗎,為什麼要用static?

1. 不能去掉。首先。你要保證單例,就必須構造私有。但是構造私有了。

你又需要對外提供乙個方法獲取該類的例項。而構造都私有了。只能通過類名訪問獲取

類名訪問只能static,而static方法只能訪問static成員。所以都要加static.

可以從兩方面理解:

2. 首先,類的靜態成員變數就是指的類共享的物件,而單例模式的物件設成靜態就是為了讓該類所有成員共享同乙個物件,所以從語義上是合適的;

其次,從語法考慮,常見的單例模式都是通過乙個靜態方法(如getinstance)返回其單例,因為靜態方法的內部不能直接使用非靜態變數,所以返回的這個例項就是靜態的。

其實,學模式不用鑽牛角尖,你試試,寫成非靜態的,總有辦法破壞你的單例。

其實問題很簡單,你首先要弄明白如何實現單例模式:

首先,將建構函式私有化(禁止其他程式建立類的物件)

其次,在本類中自定義乙個物件(禁止其他程式建立類的物件就要自己建立乙個,否則就不是單例了)

最後,提供乙個可訪問類自定義物件的類成員方法(對外提供該物件的訪問方式)。

也就是說,你不能用該類在其他地方建立物件,而是通過類提供的方法訪問類中的那個自定義物件。

那麼關鍵來了,使用類中方法只有兩種方式,①建立類的乙個物件,用物件去呼叫方法;②使用類名直接呼叫類中方法。

顯然第一種情況不能用,只能使用第二種方法。而想要使用類名直接呼叫類中方法,類中方法必須是靜態的,而靜態方法不能訪問非晶態成員變數,因此類自定義的例項變數也必須是靜態的。這就是為什麼單例模式的唯一例項為什麼設定為靜態的。

bufferedReader進一步理解

public static void main string args string mystring system.out.println 請輸入明文 bufferedreader buf new bufferedreader new inputstreamreader system.in try...

Looper Handler進一步學習

package com.test.looper import android.os.bundle import android.os.handler import android.os.handlerthread import android.os.looper import android.os....

進一步了解Makefile

mkdir p add src 一層一層建立目錄。touch add makefile 建立 makefile include 目錄中存放標頭檔案。scripts 存放指令碼檔案。存放方式 按照核心管理原始碼來管理。為什麼學習makefile?編譯大型專案 讀懂別人的開源 找到程式入口 看專案的順序...