簡體   English   中英

getinstance()究竟在單身人士中做了什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM