设计模式——10.单例模式
單例模式(Singleton)
單例模式(Singleton)簡介:
單例模式保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。使用單例模式能夠讓設計師快速獲取提供某項服務或者功能的對象,可以省去層層傳遞對象的困擾。
單例模式在實現時,需要編程語言的支持,需要編程語言具有靜態類屬性、靜態類方法以及可重新定義構造函數的訪問修飾符,具有這3項語句功能的編程語言就可以實現單例模式。
C++代碼
單線程
Singleton單例類:
//file: Singleton.h#pragma onceclass Singleton{public:virtual ~Singleton();static Singleton * getInstance();void operation();private:static Singleton * instance;Singleton();}; //file: Singleton.cpp#include "pch.h"#include "Singleton.h"#include <iostream>Singleton * Singleton::instance = nullptr;Singleton::Singleton() {}Singleton::~Singleton(){delete instance;}Singleton * Singleton::getInstance(){if (instance == nullptr)instance = new Singleton();return instance;}void Singleton::operation(){std::cout << "Singleton Operation ." << std::endl;}客戶端代碼:
//file: SingletonPattern.cpp : This file contains the 'main' function. Program execution begins and ends there.#include "pch.h"#include "Singleton.h"#include <iostream>using namespace std;int main(){Singleton * singleton = Singleton::getInstance();singleton->operation();char c;cin >> c;return 0;}多線程
C#代碼
單線程
Singleton單例類:
public class Singleton{static Singleton instance;Singleton() { }public static Singleton Instance{get{if (instance == null)instance = new Singleton();return instance;}}public void Operation(){Console.WriteLine("The Singleton Operation .");}}其中靜態類方法Instance用來獲取_instance屬性,上方代碼使用了C#的getter存取運算符功能來實現Instance方法,使Singleton.Instance()的調用方式,寫為Singleton.Instance的方式,減少的一對括號對于后續代碼維護有著一定程度的幫助。
客戶端測試代碼:
class Program{static void Main(string[] args){Singleton singleton = Singleton.Instance;singleton.Operation();Console.ReadKey();}}或者使用方法方式獲取單例:
public class Singleton{static Singleton instance;Singleton() { }public static Singleton GetInstance(){if (instance == null){instance = new Singleton();}return instance;}public void Operation(){Console.WriteLine("The Singleton Operation .");}}//使用時://Singleton singleton = Singleton.GetInstance();多線程
單例模式優點及缺點
優點:
單例模式通過將類的構造方法私有化,讓類對象只能夠在類的成員方法中產生,配合類的靜態成員屬性在類中只會出現一個的限制,讓系統可以有效的限制數量,因此,單例模式可以有效的限制類對象產生的地點和時間,同時也可以防止類對象被隨意產生而造成系統錯誤。
缺點:
單例模式使用方便,但是在挑選適合以單例模式實現的類時,需要認真挑選,不能夠濫用單例;其次,單例模式違反了“開閉原則”,因為通過Instance方法獲取的對象是“實現類”不是“接口類”,該方法返回的對象是包含了實現細節的實體類,當后續設計變更后者需求改變時,程序員無法將它替代為其他類,只能改變實現類中原有的程序代碼,無法滿足“對修改關閉”的要求。
REF
書籍:
設計模式與游戲開發、大話設計模式
GitHub:
https://github.com/me115/design_patterns
轉載于:https://www.cnblogs.com/sylvan/p/10092467.html
總結
以上是生活随笔為你收集整理的设计模式——10.单例模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Google common_schema
- 下一篇: 笔记:django is not a r