日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

设计模式——10.单例模式

發(fā)布時(shí)間:2025/5/22 asp.net 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式——10.单例模式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

單例模式(Singleton)

單例模式(Singleton)簡(jiǎn)介:

單例模式保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。使用單例模式能夠讓設(shè)計(jì)師快速獲取提供某項(xiàng)服務(wù)或者功能的對(duì)象,可以省去層層傳遞對(duì)象的困擾。

單例模式在實(shí)現(xiàn)時(shí),需要編程語(yǔ)言的支持,需要編程語(yǔ)言具有靜態(tài)類屬性靜態(tài)類方法以及可重新定義構(gòu)造函數(shù)的訪問(wèn)修飾符,具有這3項(xiàng)語(yǔ)句功能的編程語(yǔ)言就可以實(shí)現(xiàn)單例模式。

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 .");}}

其中靜態(tài)類方法Instance用來(lái)獲取_instance屬性,上方代碼使用了C#的getter存取運(yùn)算符功能來(lái)實(shí)現(xiàn)Instance方法,使Singleton.Instance()的調(diào)用方式,寫(xiě)為Singleton.Instance的方式,減少的一對(duì)括號(hào)對(duì)于后續(xù)代碼維護(hù)有著一定程度的幫助。

客戶端測(cè)試代碼:

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 .");}}//使用時(shí)://Singleton singleton = Singleton.GetInstance();

多線程

單例模式優(yōu)點(diǎn)及缺點(diǎn)

優(yōu)點(diǎn):
單例模式通過(guò)將類的構(gòu)造方法私有化,讓類對(duì)象只能夠在類的成員方法中產(chǎn)生,配合類的靜態(tài)成員屬性在類中只會(huì)出現(xiàn)一個(gè)的限制,讓系統(tǒng)可以有效的限制數(shù)量,因此,單例模式可以有效的限制類對(duì)象產(chǎn)生的地點(diǎn)和時(shí)間,同時(shí)也可以防止類對(duì)象被隨意產(chǎn)生而造成系統(tǒng)錯(cuò)誤。

缺點(diǎn):

單例模式使用方便,但是在挑選適合以單例模式實(shí)現(xiàn)的類時(shí),需要認(rèn)真挑選,不能夠?yàn)E用單例;其次,單例模式違反了“開(kāi)閉原則”,因?yàn)橥ㄟ^(guò)Instance方法獲取的對(duì)象是“實(shí)現(xiàn)類”不是“接口類”,該方法返回的對(duì)象是包含了實(shí)現(xiàn)細(xì)節(jié)的實(shí)體類,當(dāng)后續(xù)設(shè)計(jì)變更后者需求改變時(shí),程序員無(wú)法將它替代為其他類,只能改變實(shí)現(xiàn)類中原有的程序代碼,無(wú)法滿足“對(duì)修改關(guān)閉”的要求。

REF

書(shū)籍:

設(shè)計(jì)模式與游戲開(kāi)發(fā)、大話設(shè)計(jì)模式

GitHub:

https://github.com/me115/design_patterns

轉(zhuǎn)載于:https://www.cnblogs.com/sylvan/p/10092467.html

總結(jié)

以上是生活随笔為你收集整理的设计模式——10.单例模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。