zoukankan      html  css  js  c++  java
  • 单例模式

    单例模式(Singleton):

      保证一个类仅有一个实例,并提供一个访问它的全局访问点。

    一、UML结构图

    二、示例代码【重点

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 
      6 namespace 单例模式
      7 {
      8     class Program
      9     {
     10         static void Main(string[] args)
     11         {
     12             SingleModelOne.GetInstance().Show();
     13             SingleModelTwo.GetInstance().Show();
     14             SingleModelThree.GetInstance().Show();
     15 
     16             Console.Read();
     17         }
     18     }
     19 
     20     /// <summary>
     21     /// 单线程单例模式(懒汉式单例)
     22     /// </summary>
     23     public class SingleModelOne
     24     {
     25         private static SingleModelOne m_SingleModeOne = null;        
     26 
     27         /// <summary>
     28         /// 单例模式的构造函数一定要【私有化】
     29         /// </summary>
     30         private SingleModelOne() { }
     31 
     32         public static SingleModelOne GetInstance()
     33         {
     34             if (m_SingleModeOne == null)
     35                 m_SingleModeOne = new SingleModelOne();
     36 
     37             return m_SingleModeOne;
     38         }
     39         public void Show()
     40         {
     41             Console.WriteLine("1、我是懒汉式、单线程单例模式");
     42         }
     43     }
     44 
     45     /// <summary>
     46     /// 多线程单例模式(懒汉式单例)
     47     /// </summary>
     48     public class SingleModelTwo
     49     {
     50         private static SingleModelTwo m_SingleModeTwo = null;
     51         private static object m_LockObj = new object();
     52 
     53         /// <summary>
     54         /// 单例模式的构造函数一定要【私有化】
     55         /// </summary>
     56         private SingleModelTwo() { }
     57 
     58         public static SingleModelTwo GetInstance()
     59         {
     60             //双重加锁 一 :是为了防止线程阻塞,若对象已创建,此时在lock内部判断,就会导致其它线程在lock外等待。
     61             if (m_SingleModeTwo == null)
     62             {
     63                 lock (m_LockObj)
     64                 {
     65                     if (m_SingleModeTwo == null)
     66                         m_SingleModeTwo = new SingleModelTwo();
     67                 }
     68             }
     69             return m_SingleModeTwo;
     70         }
     71         public void Show()
     72         {
     73             Console.WriteLine("2、我是懒汉式、多线程单例模式");
     74         }
     75     }
     76 
     77     /// <summary>
     78     /// 单线程单例模式(饿汉式单例)
     79     /// 饿汉式:【sealed】防止类被派生,派生就可能会增加实例。
     80     ///        【readonly】对象只读,交由OCL负责初始化变量
     81     /// </summary>
     82     public sealed class SingleModelThree
     83     {
     84         //首先将对象初始化完毕
     85         private readonly static SingleModelThree m_SingleModelThree = new SingleModelThree();        
     86 
     87         /// <summary>
     88         /// 单例模式的构造函数一定要【私有化】
     89         /// </summary>
     90         private SingleModelThree() { }
     91 
     92         public static SingleModelThree GetInstance()
     93         {           
     94             return m_SingleModelThree;
     95         }
     96         public void Show()
     97         {
     98             Console.WriteLine("3、我是饿汉式、单线程单例模式");
     99         }
    100     }
    101 
    102 }
    三类单例使用场景
  • 相关阅读:
    jquery事件之事件委托和事件切换
    jquery事件之事件处理函数
    jquery动画效果
    jquery筛选元素函数
    jquery操作DOM
    jquery对css操作
    jquery属性操作
    Jquery选择器(三)
    Jquery选择器(二)
    Jquery选择器(一)
  • 原文地址:https://www.cnblogs.com/qiupiaohujie/p/11974714.html
Copyright © 2011-2022 走看看