设计模式系列1:单例模式(Singleton Pattern)
生活随笔
收集整理的這篇文章主要介紹了
设计模式系列1:单例模式(Singleton Pattern)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
定義
保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)該實(shí)例的全局訪問點(diǎn)。? --《設(shè)計(jì)模式GoF》
UML類圖
使用場(chǎng)景
C#代碼實(shí)現(xiàn)
1,初始版本
namespace DesignPatternDemo.ConsoleApp {/// <summary>/// 單例類/// </summary>public class Singleton{private static Singleton _singleton;private Singleton(){ }public static Singleton GetInstance(){if (_singleton== null){_singleton = new Singleton();}return _singleton;}} }注意:此版本在多線程環(huán)境下不能保證線程安全!
2,雙檢鎖
namespace DesignPatternDemo.ConsoleApp {/// <summary>/// 單例類(雙檢鎖)/// </summary>public class SingletonV2{private static SingletonV2 _singleton;private static readonly object lockObj = new object();private SingletonV2(){ }public static SingletonV2 GetInstance(){if (_singleton == null){lock (lockObj){if (_singleton == null){_singleton = new SingletonV2();}}}return _singleton;}} }總結(jié):雙檢鎖版本解決了多線程環(huán)境下線程安全的問題。
3,餓漢式版本
namespace DesignPatternDemo.ConsoleApp {/// <summary>/// 單例類(餓漢式版本)/// </summary>public class SingletonV3{private static readonly SingletonV3 _singleton = new SingletonV3();private SingletonV3(){ }public static SingletonV3 GetInstance(){return _singleton;}} }總結(jié):這個(gè)版本的優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單并且沒有加鎖執(zhí)行效率高,缺點(diǎn)是類加載時(shí)就初始化,可能會(huì)浪費(fèi)內(nèi)存資源。
4,測(cè)試
namespace DesignPatternDemo.ConsoleApp {class Program{static void Main(string[] args){SingletonV2 singleton1 = SingletonV2.GetInstance();SingletonV2 singleton2 = SingletonV2.GetInstance();if (singleton1 == singleton2){Console.WriteLine("對(duì)象singleton1和對(duì)象singleton2是同一個(gè)對(duì)象!");}Console.ReadKey();}} }運(yùn)行結(jié)果:
轉(zhuǎn)載于:https://www.cnblogs.com/mcgrady/p/10365964.html
總結(jié)
以上是生活随笔為你收集整理的设计模式系列1:单例模式(Singleton Pattern)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux入门:部署JavaWeb项目
- 下一篇: react复习总结(1)--react组