設計模式-建立-singleton(單例)模式

 單例模式是一種建立型的模式,適用於 全局只有一個對象的類,設計模式

結構圖安全

只有一個靜態 實例變量 和一個靜態 函數函數

class  Singleton
{
public:
	/**
	 * @brief get  the instance
	 * @return the singleton instance
	 */
	static Singleton * Instance()
	{
		static Singleton* _ins = nullptr;

		if (_ins == nullptr)
		{
			_ins = new Singleton;

		}
		return _ins;
	}
private:
	Singleton(){}
};


int main(int argc, char *argv[])
{

	auto ins = Singleton::Instance();


	system("pause");
	return 0;
}

外部經過Instance() 靜態函數來獲取 惟一實例ui

 

 

存在的問題:線程

  1. 線程安全性設計

    可用double check解決,同步操做以前 判斷一次是否爲nullptr 從而減少同步開銷代理

    可在程序啓動後初始化實例code

    2. 對象銷燬問題server

//C 11下才能保證 https://en.wikipedia.org/wiki/Double-checked_locking#Usage_in_C.2B.2B11

class A
{

public:

	A()
	{
	
		Sleep(100);
		func;
	}

	~A()
	{
 

	}


	static  A * getInstance1();//線程不安全
	static  A * getInstance2();//無鎖,比double check 效率高不少



};



A *  A::getInstance1()
{
	static A *ins = NULL;
	if (ins == NULL)
	{
		ins = new A;
	}

	return ins;
}

A *  A::getInstance2()
{
	static A ins;


	return &ins;
}


void threadFunc(void)
{
	while (true)
	{
		A::getInstance2();
	}


}
int main()
{
	//	A::getInstance();

	vector<thread> ws;

	for (int i = 0; i < 10; i++)
	{
		thread t(threadFunc);
		t.detach();
	//	ws.push_back(std::move(t));
	}

	while (1)Sleep(1);


	system("pause");
	return 0;
}

 

 

 

 

1.建立型模式對象

 

前面講過,社會化的分工愈來愈細,天然在軟件設計方面也是如此,所以對象的建立和對象的使用分開也就成爲了必然趨勢。由於對象的建立會消耗掉系統的不少資源,因此單獨對對象的建立進行研究,從而可以高效地建立對象就是建立型模式要探討的問題。這裏有6個具體的建立型模式可供研究,它們分別是:

 

簡單工廠模式(Simple Factory);

 

工廠方法模式(Factory Method);

 

抽象工廠模式(Abstract Factory);

 

建立者模式(Builder);

 

原型模式(Prototype);

 

單例模式(Singleton)。

 

說明:嚴格來講,簡單工廠模式不是GoF總結出來的23種設計模式之一。

 

2.結構型模式

 

在解決了對象的建立問題以後,對象的組成以及對象之間的依賴關係就成了開發人員關注的焦點,由於如何設計對象的結構、繼承和依賴關係會影響到後續程序的維護性、代碼的健壯性、耦合性等。對象結構的設計很容易體現出設計人員水平的高低,這裏有7個具體的結構型模式可供研究,它們分別是:

 

外觀模式(Facade);

 

適配器模式(Adapter);

 

代理模式(Proxy);

 

裝飾模式(Decorator);

 

橋模式(Bridge);

 

組合模式(Composite);

 

享元模式(Flyweight)。

 

3.行爲型模式

 

在對象的結構和對象的建立問題都解決了以後,就剩下對象的行爲問題了,若是對象的行爲設計的好,那麼對象的行爲就會更清晰,它們之間的協做效率就會提升,這裏有11個具體的行爲型模式可供研究,它們分別是:

 

模板方法模式(Template Method);

 

觀察者模式(Observer);

 

狀態模式(State);

 

策略模式(Strategy);

 

職責鏈模式(Chain of Responsibility);

 

命令模式(Command);

 

訪問者模式(Visitor);

 

調停者模式(Mediator);

 

備忘錄模式(Memento);

 

迭代器模式(Iterator);

 

解釋器模式(Interpreter)。

相關文章
相關標籤/搜索