请问单件模式中为什么要加sealed ?

flytomylife1 2011-05-22 10:12:28
1.请问为什么要限制继承呢?
2.刚刚测试了下,在构造函数是私有的情况下貌似不能继承?
呵呵~~~先谢谢大家了~ 呵呵
public sealed class Singleton
2{
3 static Singleton instance=null;
4 static readonly object padlock = new object();
5
6 Singleton()
7 {
8 }
9
10 public static Singleton Instance
11 {
12 get
13 {
14 lock (padlock)
15 {
16 if (instance==null)
17 {
18 instance = new Singleton();
19 }
20 return instance;
21 }
22 }
23 }
24}
25
...全文
125 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mumuliang 2011-06-20
  • 打赏
  • 举报
回复
通常我们实例化一个类对象是这样的
Singleton * instance = new Singleton();
这就要求构造函数是public的。
如果单件模式的构造函数不是private,那就意味着你也可以这样实例化一个单件对象。也就意味着:
Singleton * instance1 = new Singleton();
Singleton * instance2 = new Singleton();
...
Singleton * instancen = new Singleton();
这实际上就不是单件了。
private构造,就是为了保证你必须使用Singleton类的静态方法创建它的实例,而这个实例又是static的,这样才能保证程序中无论如何最多只有一个Singleton实例。
Sou2012 2011-06-02
  • 打赏
  • 举报
回复
构造函数私有。 这样你就不能实例化一个类了,只能通过一个public static 函数来获取唯一实例。

因为唯一实例,才叫单例设计模式。

如果有兴趣,可以看看我的这篇博文。
http://blog.csdn.net/ilysony/archive/2011/06/01/6458401.aspx
flytomylife1 2011-05-23
  • 打赏
  • 举报
回复
加上一个sealed只是对外表现出来不能继承是么?而实际上由于构造函数是私有的,所以潜在中就是不能被继承的了?
昵称很不好取 2011-05-22
  • 打赏
  • 举报
回复
要明白单件模式的意义,就是要在需要的时候确保全局唯一,要继承单件模式的意图是什么?
构造函数私有后,子类无法调用,当然不能继承了
truecn 2011-05-22
  • 打赏
  • 举报
回复
class Main:DP.Singletion.DesignPattern.Singleton
{
private void TestSingleton()
{
string strHello = Singleton.GetInstance().Method();
Main main = new Main();
main.Method();
}


}


上面代码中父类的Method()是我在单例类中额外加入的一个,只不过一定不要这样干,因为类一定要保持职责单一。
truecn 2011-05-22
  • 打赏
  • 举报
回复
为什么要限制继承这个应该问你啊,你为什么要限制继承?

这个显示限制继承只不过是给客户端明确告诉一下,我这个类不能继承而已。
但是并不是说一定要限制继承,如果你喜欢剑走偏锋,那么也可以继承。只不过不要继承是潜规则而已。

第二个问题,单例类在语法上是可以继承的,但是没有必要啊。
因为单例类中的核心是私有的构造和公有静态的全局返回点。其他的方法放在这里没有太大意义。

当然如果在特别需要的情况下,单例类中有其他可以被继承的方法,那么这些方法他的子类依然是可以继承的。
念茜 2011-05-22
  • 打赏
  • 举报
回复
顶LS
全局唯一

3,405

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 设计模式
社区管理员
  • 设计模式
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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