单一设计模式(Singleton) singleton模式 c

什么是Singleton模式?

Sigleton模式的设计意图是:保证一个类只有一个对象实例,并提供一个访问对象实例的全局访问点。

如果我们想实现一个全局范围可见的对象以替代麻烦缠身的全局变量,那么最好的做法就是将数据封装在一个特殊的类中。这个严格管理数据的创建过程以保证数据的唯一性,同时不允许程序员随意创建该类的对象实例。虽然不能通过类的构造函数获得对象实例,但可以通过该类提供的静态成员函数得到该类唯一的对象实例的指针或引用。

Singleton模式和全局变量有什么区别:

全局变量的问题:

(1)变量名冲突:必须小心维护变量名规则,所有工程师在开发代码时,每遇到一个全局变量,都必须仔细分辨该变量究竟属于哪个模块、哪个程序。
(2)耦合度难题:全局变量实际上增加了函数与模块之间的耦合度。用通俗的话说,需要访问某个特定全局变量的多个函数被该变量牢牢地“粘结”在一起,成为拆不散的一团乱麻。
(3)单个实体问题:全局变量不能阻止程序员定义一个类的多个对象实例。如果没有其它技术手段帮助,保证一个类只有单个实例就全靠程序员的自觉。
(4)初始化顺序:全局变量不能保证相互之间遵循特定的初始化顺序,这完全由编译器决定。对于类的对象实例,构造函数被调用的顺序有时就显得非常重要。
(5)多线程访问:当多个并发的线程都需要访问某些全局变量时,我们必须使用各种同步机制,小心地保护这些全局变量,以免陷入并发冲突的泥潭。

singleton模式的优点:
1)跨平台:使用合适的中间件,可以把singleton模式扩展为跨多个JVM和多个计算机工作。
2)适用于任何类:只需把一个类的构造函数变成私有的,并且在其中增加相应的静态函数和变量,就可以把这个类变成singleton。
3)可以透过派生创建:给定一个类,可以创建它的一个singleton之类。
4)延迟求值:如果singleton从未使用过,那么就决不会创建它。
singleton模式的代价 :
1)摧毁方法未定义:没有好的方法去摧毁一个singleton,或者解除其职责。即使添加一个decommission方法把theInstance置为null,系统中的其他模块仍然持有对该singleton实例的应用。这样,随后对Instance方法的调用会创建另外一个实例,致使同时存在两个实例。这个问题在C++中尤为严重,应为实例可以被摧毁,可能会导致去提领一个已被摧毁的对象。
单一设计模式(Singleton) singleton模式 c
2)不能继承:从singleton类派生出来的类并不是singleton。如果要使其成为singleton,必须要增加所需的静态函数和变量。
3)效率问题:每次调用Instance方法都会执行if语句。就大多数调用而言,if语句是多余的。
4)不透明性:singleton的使用者知道它们正在使用一个singleton,因为它们必须要调用Instance方法。

Singleton模式示例代码:
class Singleton
{
private static Singleton _instance = null; // 静态对象,只初始化一次!
privateSingleton(){}//构造函数为private
public static Singleton Instance()
{
if(_instance==null) // 保证每次只能实例化一个对象

{
_instance=new Singleton();
return_instance;
}
}

}

运用singleton模式:
多个应用程序都需要打印log信息,比如向同一个控制台或者同一个文件输出。此时是需要用到单一模式的,在多个进程或线程中,只能生成一个类的对象实例。

  

爱华网本文地址 » http://www.413yy.cn/a/25101013/146451.html

更多阅读

浅析Producer-Consumer设计模式 producer consumer

我气死了都!终于登上博客了!什么破网络!本来都不打算写了!不过这个问题已经总结了有一段时间了,就是生产者消费者模式,我是用professor上课的代码来分析的。下面我就贴上代码吧,在代码中有注释,就是对生产者和消费者的分析吧。我要抓紧时间,

设计模式的UML图(转) 工厂模式uml图

1.抽象工厂(Abstract Factory)模式意图:为特定的客户(或情况)提供特定系列的对象。2.类的适配器(Adapter)模式意图:将一个类的接口转换成客户希望的另外一个接口。3.对象的适配器(Adapter)模式意图:将一个类的接口转换成客户希望的

设计模式概论 设计学概论

设计模式概论1. 设计模式设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系

设计模式之备忘录模式Memento _阿- 备忘录模式 应用场景

简述备忘录模式的用意是在不破坏封装性的条件下,将对象的状态存储起来,从而在未来合适的时候将对象的状态恢复到从前(某个检查点)。角色1.备忘录(Memento)角色1)将发起人对象的内容状态存储起来。备忘录可以根据发起人对象的判断来决

DTC模式 设计模式

DTC模式文/红叶霜天DTC(direct tocustomer),即院外销售。一般指医药代表与医生沟通好,要求医生开具处方让顾客到指定的与药企合作的药房购买。一般由医药代表带领顾客到特定药房购买,这是源于美国的一种模式,在国外很普遍。市场前景:按

声明:《单一设计模式(Singleton) singleton模式 c》为网友时光的模样分享!如侵犯到您的合法权益请联系我们删除