Singleton(单件)- 对象创建型模式

来源:互联网 发布:人人分销系统源码 编辑:程序博客网 时间:2024/06/04 00:21

Singleton模式

一、简介:

定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。[GOF]

优点:1.一个类仅有一个实例,并且客户可以从一个众所周知的访问点访问它。

           2.该类可以通过子类化扩展,并且不需要改变用户已有代码。

           3.惰性初始化,只有在客户实际使用时才创建该类的唯一实例。

           4.是对全局变量的一种改进,避免全局变量污染命名空间。

           5.不会造成潜在的初始化和析构问题。(不同编译单元的全局变量和静态变量初始化顺序不定)

二、实现方式

                    GOF方式:

                           

                    缺点:1.调用多次会返回多个指针,为防止单个用户调用delete删除对象,需要添加引用计数。

                               2.没有定义删除的时间,析构函数不会被调用,需要使用智能指针或 atexit 函数。

                               3.静态函数不支持虚继承。

                               4.多线程中可能导致多次创建问题(if 之后)。

                   使用智能指针改进:

                            

                          

                    Scott Meyers方式:

                            

                                缺点:静态函数不支持虚继承。

三、子类

       由于静态函数不支持虚继承,我们不能在子类中重新定义Intance的实现,导致每增加一个子类,我们都要修改基类的Instance函数的实现,并且需要一个参数用于决定实例化哪个子类。

        Singleton的继承类还是Singleton模式的吗?如果是的话,构造函数应该是保护的,怎么能够被基类的Instance创建呢?如果不是Singleton模式,继承就没用了吧!

四、参考

 

                          http://www.codeproject.com/KB/architecture/singleton.aspx