? 單例模式
現例項子
一個國家同一時間只能有一個總統。當使命召喚的時候,這個總統要採取行動。這裡的總統就是單例的。
白話
確保指定的類只生成一個物件。
維基百科
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