`

单 例(Singleton)

阅读更多
单例模式:确保一个类只有一个实例,并提供一个全局访问点。这些类比如包括:线程池,缓存,对话框,处理偏好设置,注册表的对象,日志对象,充当打印机,显卡等设备的驱动程序对象。

要点:
1.单例模式确保程序中一个类最多只有一个实例
2.单例模式也提供访问这个实例的全局点
3.确定在性能和资源上的限制,然后小心地选择适当的方案来实现单件,以解决多线程问题
4.如果使用多个类加载器,可能导致单例失效而产生多个实例

如果性能对应用程序不是很关键:
#include<iostream>
#include<stdlib.h>
using namespace std;

class Singleton{
private:
    Singleton(){}
public:
    static Singleton* singleton;
    static Singleton* getInstance(){
        if(singleton==NULL){
           singleton = new Singleton;//程序将会走这一行
        }
        return singleton;
    }
    void fun(){
        cout << "this is a singleton" << endl;
    }
};
//注意静态变量得在外面初始化
Singleton* Singleton::singleton = NULL;

int main(){
    Singleton::getInstance()->fun();
}



如果使用总是很急切,就不用延迟实例化
#include<iostream>
#include<stdlib.h>
using namespace std;

class Singleton{
private:
    Singleton(){}
public:
    static Singleton* singleton;
    static Singleton* getInstance(){
        return singleton;
    }
    void fun(){
        cout << "this is a singleton" << endl;
    }
};

//直接实例化,不延迟
Singleton* Singleton::singleton = new Singleton;

int main(){
    Singleton::getInstance()->fun();
}



多线程
#include<iostream>
#include<auto_ptr.h>
using namespace std;

class Singleton{
private:
    Singleton(){}
public:
    static Singleton* getInstance(){
        typedef auto_ptr<Singleton> singletonPtr;
        static singletonPtr singleton;
        if(singleton.get()==NULL){
            singleton.reset(new Singleton);
        }
        return singleton.get();
    }
    void fun(){
        cout << "this is a singleton" << endl;
    }
};

int main()
{
    Singleton::getInstance()->fun();
}

分享到:
评论

相关推荐

    singleton设计模式java实现及对比

    这种方式利用Java类加载机制保证单例的唯一性。 ```java public class Singleton { private Singleton() {} private static class SingletonInstance { private static final Singleton INSTANCE = new ...

    SingleTon的模板(template)化应用

    单例模式是软件设计模式中的一种经典模式,用于确保一个...总之,将模板应用于单例模式可以使代码更加灵活和可复用,但同时也需要注意其潜在的代码膨胀和运行时限制。在实际项目中,应根据需求选择合适的单例实现策略。

    17-SingleTon.rar

    利用Java类加载机制保证单例的唯一性,同时实现了延迟加载。 ```java public class Singleton { private Singleton() {} private static class SingletonHolder { private static final Singleton INSTANCE = ...

    Java多线程编程环境中单例模式的实现

    ### Java多线程编程环境中单例模式的实现 #### 概述 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式的应用非常广泛,特别是在资源管理、日志记录、...

    多线程下的singleton

    另一种线程安全的实现是“静态内部类”方式,利用类加载机制保证单例的唯一性: ```java public class Singleton { private Singleton() {} private static class SingletonHolder { private static final ...

    singleton.zip单例的几种实现demo,

    利用Java类加载机制保证单例的唯一性,同时避免了线程同步问题。内部类不会因为外部类的加载而加载,只有当调用`getInstance()`方法时,内部类才会被加载并创建单例: ```java public class Singleton { private...

    Java Singleton 实用教程(附源码)

    4. **静态内部类**:利用类加载机制保证单例的唯一性,避免了同步开销。例如: ```java public class Singleton { private Singleton() {} private static class SingletonHolder { private static final ...

    M2_Singleton_单例模式_java_powder53m_arrow51c_

    利用Java类加载机制保证单例的唯一性,同时避免了同步带来的性能影响。 ```java public class Singleton { private Singleton() {} private static class SingletonInstance { private static final Singleton ...

    JAVA中单例模式的几种实现方式.doc

    为了保证单例模式在多线程环境下的正确性,可以在`getInstance()`方法上加上`synchronized`关键字,以确保同一时间只有一个线程能够执行该方法,从而避免创建多个实例。 ```java public class Singleton { private...

    singleton.zip

    在本例中,“singleton.zip”可能包含了一个关于如何在Qt框架下实现和应用单例模式的代码示例或教程。 首先,让我们详细解释一下单例模式的基本概念。单例模式的核心在于限制类的实例化过程,只允许存在一个实例。...

    java-thread-safe-singleton-pattern.rar_starvation

    双重检查锁定通过添加 volatile 关键字确保多线程环境下的可见性和有序性,防止指令重排序,从而保证单例的安全性。 ```java public class Singleton { private volatile static Singleton instance; private ...

    单例模式和多例模式

    单例模式和多例模式是软件设计模式中的两种重要类型,它们主要用来控制类的实例化过程,确保在系统中某一类只有一个实例或者多个实例。 单例模式是一种限制类的实例化过程,使得一个类在整个应用程序中只能有一个...

    C#描述中的单例与多例模式

    根据提供的标题、描述、标签及部分内容,我们可以详细探讨C#中的单例(Singleton)与多例(Multiton)设计模式。 ### 单例模式 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问...

    006Singleton.rar

    4. **静态内部类**:通过将单例的实例化过程封装在一个静态内部类中,可以确保类加载时不会立即实例化单例,同时由于静态内部类只会被加载一次,所以也能保证单例的唯一性,这种方法线程安全且延迟初始化。...

    singleton、回调函数、sizeof等小结.docx

    Singleton保证单例类的唯一性,简化了全局状态的管理;回调函数则增强了代码的灵活性和可扩展性,实现了功能的解耦和事件驱动。在学习和研究计算机科学,尤其是RISC-V架构相关的CS知识时,掌握这些概念和技术是非常...

    C++、MFC源代码Singleton_demo

    总结来说,这个项目提供了一个学习和实践C++和MFC中单例模式的实例,通过对"说明.htm"的学习和"代码中国.txt"的阅读,可以深入理解单例模式的原理及其在实际项目中的应用。同时,"C++、MFC源代码Singleton_demo"目录...

    C++中实现Singleton的正确方法

    在本例中,`singleton2_t`的静态实例在`singleton1_t`之前被初始化,导致`singleton1_t`的`count_`在`singleton2_t`构造时被改变,从而产生了错误的结果。 正确的Singleton实现应考虑以下几点: 1. **线程安全**:...

    实现単例模式的例子(如何实现単例和好处)

    単例模式是一种常见的设计模式,它在软件工程中被广泛应用,主要目的是确保一个类在整个应用程序的生命周期中只有一个实例存在。这种模式对于那些需要频繁创建和销毁的对象特别有用,因为它可以减少内存开销,提高...

    单例多例模式

    单例(Singleton)是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式的优点是能够节省系统资源,因为它避免了重复创建对象的开销。多例(Prototype)则是指每个请求都创建一个...

    java单例模式实例

    private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } ``` 接下来是**双重检查锁定(Double-Check ...

Global site tag (gtag.js) - Google Analytics