关于 单件模式 与 静态类

yidichaxiang 2010-12-19 11:58:52
最近开始研究设计模式,有些不懂得地方希望高人指点一二,

我的理解:单件模式就是为了控制 New操作,使类的用户只能创建一个实例;
在这里不讨论单件模式的扩展,只具体到:一个类只能创建一个实例。

实现单件模式无非是屏蔽构造函数不能让用户自己New,并提供类实例的获取‘方法’(可以通过属性或方法来实现),
其中 在类实例的获取‘方法’中控制 只能创建一个实例。

这时我想到一个问题,既然不让类的用户创建多余的实例,为什么不用静态类来实现;
因为用户访问的都是一个实例所以数据都是共享的,在这一点上与静态类没什么区别,
只不过是调用方式不同,

还是C#的内部实现机制,或内存占用的差异 才决定不使用静态类实现?
...全文
158 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
彭金华 2011-06-27
  • 打赏
  • 举报
回复
了解了。
yidichaxiang 2010-12-19
  • 打赏
  • 举报
回复
谢了,忘了静态类不能实现接口了,看来得补一下基础了
wuyq11 2010-12-19
  • 打赏
  • 举报
回复
创建单一实例的单例模式,可以自由发挥的自由度更大一些。
静态类是不能实例化的,而单件模式是可以实例化的,并且只允许进行一次实例化
Singleton实例可以实现接口,静态类不可以.
gomoku 2010-12-19
  • 打赏
  • 举报
回复
其实区别就在“静态”上。
静态类不能实现接口,而单件模式可以实现接口。使用上可以灵活一些:

class MyCurrencyFormater : IFormatProvider
{
public static readonly MyCurrencyFormater Instance = new MyCurrencyFormater();
private MyCurrencyFormater() {}
...
}

string my = string.Format( MyCurrencyFormater.Instance, "{0}", 123.45 );

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧