zoukankan      html  css  js  c++  java
  • 【设计模式】单件模式 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);

    }

       

  • 相关阅读:
    Chrome下载无后缀问题
    duilib程序HelloWorld
    go的windows下的安装包
    ASP.NET MVC异步上传图片和富文本编辑器的使用详解
    搭建go环境(windows和linux)
    构建离线Go编程指南——gotour
    判定模块加载时是否存在循环依赖
    Winform开发框架之框架演化
    为什么要写技术博
    JTREE使用例子—创建一个客户端界面
  • 原文地址:https://www.cnblogs.com/ningth/p/2327370.html
Copyright © 2011-2022 走看看