zoukankan      html  css  js  c++  java
  • C# 语法五 单例类、单例模式

    1.优点

    只有一个实例

    2.缺点

    a)这个实例不能随时释放掉,占用资源。

    b)每次使用,都要判断是否为空,增加消耗

    3.适用场景

    只能有一个实例的业务场景,例如:数据库连接对象(每次连接都是同一个连接)、打印(多次打印,但同时只能一个在打印)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        /// <summary>
        /// 第一种:经典模式,每次都判空,增加消耗,这是缺点
        /// </summary>
        public class ClassStaticTest
        {
            private static ClassStaticTest instance;
    
            private ClassStaticTest()
            {
            }
    
            public static ClassStaticTest GetInstance()
            {
                if (instance == null)
                {
                    instance = new ClassStaticTest();
                }
    
                return instance;
            }
    
            public int Age { get; set; }
            public string Name { get; set; }
    
            public void DoSome()
            {
                Console.WriteLine(Age);
                Console.WriteLine(Name);
            }
    
        }
    
    
        /// <summary>
        /// 第二种:多线程安全
        /// </summary>
        public class ClassStaticTest2
        {
            private static object obj = new object();
            private static ClassStaticTest2 instance;
    
            private ClassStaticTest2()
            {
            }
    
            public static ClassStaticTest2 GetInstance()
            {
           //双重加锁
    if (instance == null) { lock (obj) { if (instance == null) { instance = new ClassStaticTest2(); } } } return instance; } public int Age { get; set; } public string Name { get; set; } public void DoSome() { Console.WriteLine(Age); Console.WriteLine(Name); } } /// <summary> /// 第三种:CLR解决线程安全,当没有用到该类时,实例都存在,这是缺点 /// </summary> public class ClassStaticTest3 { private static readonly ClassStaticTest3 instance = new ClassStaticTest3(); private ClassStaticTest3() { } public static ClassStaticTest3 GetInstance() { return instance; } public int Age { get; set; } public string Name { get; set; } public void DoSome() { Console.WriteLine(Age); Console.WriteLine(Name); } } }
    天生我材必有用,千金散尽还复来
  • 相关阅读:
    揺する、揺らす、揺さぶる区別
    test
    W5N1のW2D2
    微软企业库6的使用方法
    Delphi XE6 原生解析json
    delphi URL 编码的转换
    Go语言配置与开发环境配置
    Win7 IIS下启用ASP.NET
    Windows2003远程桌面单会话登录
    IIS7应用程序池集成和经典的区别
  • 原文地址:https://www.cnblogs.com/ligenyun/p/7840770.html
Copyright © 2011-2022 走看看