• 【设计模式】单件模式 c#与c++实现


    单件模式是一种用于确保整个应用程序中只有一个类实例且这个实例所占资源在整个应用程序中是共享时的程序设计方法

       

    c# 实现:

    --------------------------------------------------------------------------

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

       

    //单件模式基础模型

    //来源:Gmap.net源代码中

    namespace Design.Singleton

    {

    /// <summary>

    /// generic for singletons

    /// 单件模式 泛型

    /// </summary>

    /// <typeparam name="T"></typeparam>

    public class Singleton<T> where T : new()

    {

    // ctor

    protected Singleton()

    {

    if (Instance != null)

    {

    throw (new Exception("You have tried to create a new singleton class where you should have instanced it. Replace your \"new class()\" with \"class.Instance\""));

    }

    }

       

    public static T Instance

    {

    get

    {

    return SingletonCreator.instance;

    }

    }

       

    class SingletonCreator

    {

    static SingletonCreator()

    {

       

    }

    internal static readonly T instance = new T();

    }

    }

    }

       

    c++实现

    ---------------------------------------------------------------------------------------------------------

    //来源 boost 1.48 boost\thread\detail\singleton.hpp

    //此非线程安全,线程安全使用 boost\serialization\singleton.hpp

    template <class T>

    class singleton : private T

    {

    private:

    singleton();

    ~singleton();

       

    public:

    static T &instance();

    };

       

       

    template <class T>

    inline singleton<T>::singleton()

    {

    /* no-op */

    }

       

    template <class T>

    inline singleton<T>::~singleton()

    {

    /* no-op */

    }

       

    template <class T>

    /*static*/ T &singleton<T>::instance()

    {

    // function-local static to force this to work correctly at static

    // initialization time.

    static singleton<T> s_oT;

    return(s_oT);

    }

       

  • 相关阅读:
    HTML&&CSS
    web概述&HTML快速入门
    JDBC连接池&JDBCTemplate
    基于Breast Cancer dataset的决策树分类及可视化
    三维数组按行优先存储求某位置的地址
    2019年复旦计算机专硕考研经验总结
    1013 Battle Over Cities (25 分)
    1009 Product of Polynomials (25 分)
    1004 Counting Leaves (30 分)
    1090 危险品装箱 (25 分)
  • 原文地址:https://www.cnblogs.com/ningth/p/2327370.html
Copyright © 2020-2023  润新知