zoukankan      html  css  js  c++  java
  • 极速理解设计模式系列:11.单例模式(Singleton Pattern)

    单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

    三要点

           一、单例类只能有一个实例

           二、单例类必须自行创建自身实例

           三、单例类自行向整个系统提供实例

    类图

    应用场景:在整个系统中只需要一个类实例的全局可用类。比如License验证,内存管理等。

    分析:其内部有很多需要提供全局访问的方法,对于C#中单例模式有两种创建:双检索单例、饿汉单例。

    下面我们在控制台程序中演示如何创建者两种单例模式:

    双检索单例

     //双检锁的单例模式
    public class License
    {
    private static License instance ;
    private static object _lock = new object();
    private License() { }
    public static License GetInstance()
    {
    if (instance == null)
    {
    lock (_lock)
    {
    if (instance == null)
    {
    instance = new License();
    }
    }
    }
    return instance;
    }
    public void CheckLicense(int code)
    {
    if (code == 20110925)
    Console.WriteLine("通过了License验证");
    else
    Console.WriteLine("没有通过License验证");
    }
    }

    饿汉单例

        //饿汉单例模式
    public class GcManager
    {
    public static readonly GcManager instance = new GcManager();
    private GcManager() { }
    public void FreeMemory()
    {
    GC.Collect();
    Console.WriteLine("开始释放内存!");
    }
    public void FreeObject()
    {
    Console.WriteLine("开始释放对象!");
    }
    }

    客户端应用

        class Program
    {
    static void Main(string[] args)
    {
    //
    License.GetInstance().CheckLicense(20110925);

    GcManager.instance.FreeMemory();
    GcManager.instance.FreeObject();

    Console.ReadLine();
    }
    }

            如果需要源码请点击 SingletonPattern 下载。

  • 相关阅读:
    codeforces 652B z-sort(思维)
    poj 3268 Silver Cow Party(最短路)
    POJ 2243:Knight Moves(BFS)
    POJ 1107:W's Cipher(模拟)
    POJ 1008 Maya Calendar(模拟)
    Hdu3436-Queue-jumpers(伸展树)
    主席树的另一种写法
    Hdu5785-Interesting(回文串处理)
    Hdu5008-Boring String Problem(后缀数组)
    RMQ模板
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2190024.html
Copyright © 2011-2022 走看看