1,C#设计模式这本书中,把singleton放在创建型模式中。 2,维基百科的定义:In software engineering, the singleton pattern is a design pattern used to implement the mathematical concept of a singleton, by restricting the instantiation of a class to one object. 3.微软msdn中对于实现单件模式的代码示例如下: using System;public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton Instance { get { if (instance == null) { instance = new Singleton(); } return instance; } } } 并没有使用静态类。 4,搜了google,没有发现用静态类来作为单件模式的实现方式。 因此,可以推动静态类和单件模式还是不能完全划等号。判断是否是单件模式,我的标准是维基百科的定义。欢迎提出反对意见,欢迎辩论。
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
// Private constructor prevents instantiation from other classes
private Singleton() {
}
public static Singleton getInstance() {
return INSTANCE;
}
}
或者在C#中实现singleton模式,这两种实现方式都是可以的,但是哪一种更加“正确”点呢?
两种实现方式可以互换吗??
谁说创建实例才叫Singleton?典型的教条主义+书呆子。
1,C#设计模式这本书中,把singleton放在创建型模式中。
2,维基百科的定义:In software engineering, the singleton pattern is a design pattern used to implement the mathematical concept of a singleton, by restricting the instantiation of a class to one object.
3.微软msdn中对于实现单件模式的代码示例如下:
using System;public class Singleton
{
private static Singleton instance; private Singleton() {} public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
并没有使用静态类。
4,搜了google,没有发现用静态类来作为单件模式的实现方式。
因此,可以推动静态类和单件模式还是不能完全划等号。判断是否是单件模式,我的标准是维基百科的定义。欢迎提出反对意见,欢迎辩论。
1。与其纠结那个代码,不如学习人家如何思考,如何表达这个世界2。模式受限于技术手段,不同时期,技术手段不同。即使是同一个人在同一个世界观下的模型,在不同技术时期也不一样,毕竟技术手段不一样。这个你比较一下。C#,basic,python,prolog这几个语言风格写出来的费波拉契数就明白了,费波拉契数的计算规则是不会变滴,但是在对象式,过程式,申明式,逻辑式中他们代码手段则完全不同3。各种设计模式书里所提到的那些例子,实际上也都是程序员个人的世界观和策略体现。或许这些例子表达了一些通行的策略,但是实际上每个人世界观和策略实际是不同地。所以针对同一个问题,让我和楼上几位星星去把问题抽象出来,我们答案也许都是不一样滴。这里面并没有谁正确,谁错误的区别,只是有谁更符合那个项目而已(当然也有可能,我们几位都给出了一样的答案,但也只能表明对于这个项目,这个问题我们在世界观上相近,而策略上也是英雄所见略同而已)
只要你不是按过程的写法,只要你按照还原实现模型对象理念,只要你是按照那5个基础设计原则去设计。出来的东西80%就是符合模式滴。为什么设计模式被吹的神乎其神,这就是原因--80%可不是一个随便的数字,我个人虽然不太看重书本上那些模式,但是也不得不佩服总结出来的人。你写出来的东西,能有80%的东西都在上面找到,相当了不起的总结。
原著优秀的地方就在于,没有让你读死书,读书死,而是尽量把分析和权衡、取舍的过程讲出来,并且给了你一不止一个参考实现。至于Singleton模式和静态类,只有一个类的Singleton和静态类相比没什么代码行上的优势(差十行二十行?)。
但是,面向对象的编程,不是追求代码行最少,而是强调设计的灵活性。
单例模式有一个增强,就是有派生类的单例,在那种情况下,你看看静态类如何模拟?
这是显而易见的事情,比如单件,内存缓存的是实例。我可以在对象本身放入事件,我也可以clone,copy,hash,也可以把他当做参数传递给另外的一个对象请问静态类能否做这些事情
两种差别挺大的.具体根据需要取舍.没有谁好谁不好之说.
{
HANDLE hMutex = CreateMutex(NULL, TRUE, "Application");
if( hMutex != NULL )
{
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
return FALSE;
}
}
return TRUE;
}PS : 这段代码的作用就是只开一个应用程序实例。如果严格对号经典的单例模式的实现,这个很难算上是单例模式了。
但是如果仔细想想单例模式背后所体现的思想,这个不还是单例模式的一种实现吗?不过换了个马甲而已,哈哈~~楼主所提到的问题,就是经典的“饿汉式”(静态)和“懒汉式”(Double-Check)的两种实现。
但从实际定义出发,可以不算,因为他没有实例话。
换句话说。单例模式可以很方便的扩展为双例模式,但是静态类就没办法做到这一点。
首先:singleton是设计模式,说白了是最佳实践。而静态类则是c#的一种类型机制,他们有着本质的区别。
当然singleton也用到了静态变量,他虽然不能被实例化但绝不是静态类只是单例的构造方法是私有的而已。
其次:在单例模式中含有了静态成员,正是静态成员的存在使得你觉得他和静态类没有区别。
其实是这样的,当你掉用静态类时单例模式才去初始化这个类,从而传个你一个实例。
而静态类是在应用程序加载内存的时候就已经分配了内存空间,既初始化了。
所以建议你多用单例而不要静态类,在实际项目中静态类是应该避免使用的。这个牵涉到性能问题。
singleton和静态类是没有可比性的:
首先:singleton是设计模式,说白了是最佳实践。而静态类则是c#的一种类型机制,他们有着本质的区别。
当然singleton也用到了静态变量,他虽然不能被实例化但绝不是静态类只是单例的构造方法是私有的而已。
其次:在单例模式中含有了静态成员,正是静态成员的存在使得你觉得他和静态类没有区别。
其实是这样的,当你掉用单例的静态成员时单例模式才去初始化这个类,从而传个你一个实例。
而静态类是在应用程序加载内存的时候就已经分配了内存空间,既初始化了。
所以建议你多用单例而不要静态类,在实际项目中静态类是应该避免使用的。这个牵涉到性能问题。
或者在C#中实现singleton模式,这两种实现方式都是可以的,但是哪一种更加“正确”点呢?
两种实现方式可以互换吗??
静态类在加载程序集的时候就会初始化类程序,Singleton模式只有在使用到的时候才会实例化对象。
而且在很多情况下,比如你加载一个配置文件,加载的结果是一堆键值对,你用静态类怎么做??每次都读取??如果你再静态类里面做了 如果 某某是空 就去读取文件的操作,那和Singleton模式有何区别?
请问高人,发帖讨论各抒己见,我发表我的看法,我可没标榜我的是正确的。
如果只允许所谓的高人发言,我看CSDN也不过如此。
我也讲讲个人观点。
Singleton模式 和 静态类 比较?
Singleton模式是一种设计模式。设计模式有千千万万种,但基于基础是解决一系列问题的一个解决方案。
所以说Singleton模式是一个解决方案的抽象命名。具体解决那些问题上面各位都说的很清楚。
静态类:这东西太玄了,说到都头痛,用到肯定会更头痛。 静态类应该可以处理任何问题。只要你肯写。大伙讨论的可能是singleton模式可能使用到静态类实现?
复制3楼的代码using System;public class Singleton
{
private static Singleton instance; private Singleton() {} public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}我不知道这代码是哪来的,3楼说是维基百科,个人认为:第一这个Singleton貌似写错了,第二这也貌似不是静态类。我晕呼呼
添加一个Create方法和一个static成员
都用不了你10行代码而这10行代码所换来的东西简直就是超值是Static class无法比拟的