【C++】實現一個簡單的單例模式

weixin_34037977發表於2017-05-14

? 單例模式

現例項子

一個國家同一時間只能有一個總統。當使命召喚的時候,這個總統要採取行動。這裡的總統就是單例的。

白話

確保指定的類只生成一個物件。

維基百科

In software engineering, the singleton pattern is a software design pattern that restricts the instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system.

單例模式其實被看作一種反面模式,應該避免過度使用。它不一定不好,而且確有一些有效的用例,但是應該謹慎使用,因為它在你的應用裡引入了全域性狀態,在一個地方改變,會影響其他地方。而且很難 debug 。另一個壞處是它讓你的程式碼緊耦合,而且很難仿製單例。

程式碼例子

要建立一個單例,先讓建構函式私有,不能克隆,不能繼承,然後創造一個靜態變數來儲存這個例項。

以下是餓漢模式:

game.h

#pragma once
class Game {
public:
        static Game* getInstance();//單例模式
        void start();
private:
        Game(){};
        Game(const Game&) {};
        Game &operator=(const Game&) {};
        static Game *instance;
}

game.cpp

#include <iostream>
#include "game.h"

Game* Game::instance = new Game;
Game* Game::getInstance() {
        return instance;
}
void Game::start(){
        std::cout<<"Game Start!"<<std::endl;
}

使用的時候:

#include "game.h"

int main() {
        Game *g = Game::getInstance();
        g->start();
        return 0;
}

參考:https://github.com/questionlin/design-patterns-for-humans

相關文章