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);

    }

       

  • 相关阅读:
    Codeforces Round #362 (Div. 2) C
    poj1655 树重心
    poj1985 树直径
    Codeforces Round #403 (based on Technocup 2017 Finals)
    uva 10054 The necklacr
    bfs codeforces 754B Ilya and tic-tac-toe game
    矩阵快速幂专题
    CodeForces 863E Turn Off The TV 思维,扫描线
    CodeForces 803F Coprime Subsequences 莫比乌斯,容斥
    CodeForces 803C Maximal GCD 思维
  • 原文地址:https://www.cnblogs.com/ningth/p/2327370.html
Copyright © 2011-2022 走看看