[英]What exactly does getinstance() do in a singleton?
我遇到過單身人士模式 。 我無法理解它們之間的區別
singletonobj.getinstance().dosomething() //1st one
和
singletonobj.dosomething() //2nd one
getinstance()
做了什么,在第二種情況下沒有做到?
好吧,從技術上講, singletonobj.getinstance()
是多余的,因為這意味着你已經掌握了對象。
通話通常看起來像:
SingletonClass::getinstance().dosomething();
要么
singletonobj.dosomething()
如果你預先取了對象 - 也就是先前做過的
SingletonClass& singletonobj = SingletonClass::getinstance();
首先, singletonobj
是一個錯誤/混淆的名稱。 單身人士在課堂上被召喚,例如:
Log::getInstance().doSomething();
並不是
Log log = new Log;
log.getInstance().doSomething();
所以這應該回答這個問題,但無論如何我都會詳細說明:)
Log::doSomething();
將強制doSomething()
作為靜態方法,而
Log::getInstance().doSomething();
將doSomething()
作為實例方法。
為什么要使用getInstance()
? 因為單身,按其定義,應該只有零個或一個實例。 通過使單例的構造函數為private並發布getInstance()
方法,它允許您控制該類的實例數。 私有構造函數只是為了避免其他類來實例化這個類,這會破壞這個類作為單例的目的,因為你無法控制這個類有多少個實例。
class SingletonExample {
private:
static SingletonExample* instance = NULL;
SingletonExample() { }
public:
static SingletonExample getInstance() {
if (instance == NULL) {
instance = new SingletonExample;
}
return *instance;
}
void doSomething() {
// Do something :)
}
}
似乎第一個例子是調用常規方法,而第二個例子是調用靜態方法。
Singleton設計模式確保在任何給定時間僅實例化給定對象的單個實例。 第一個示例返回所述實例,然后使用對象的實例調用方法。
第二個例子似乎是使用一個不需要對象實例的靜態方法,實際上使單例設計模式無效......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.