Singletone模式为什么说会引起耦合

07-12-29 pengpenglin
最近在学设计模式,看了banq大哥的Singletone模式文章和网上的一些文章及争论。发觉其中的争论无非有两点:

1.多线程情况下容易引起混乱,返回多个实例

2.用了singletone会引起类之间的耦合

对于第一个问题比较好理解,但第二个问题我有点想不清楚,为什么说用了Singleton会引起类之间的耦合呢?

如果是这样的话,能够有什么别的解决方法吗?

fnet
2008-01-06 10:57
饿汉式 貌似没有多线程问题吧

public class EagerSigleton(){

private static final EagerSigleton m_instatnce=new EagerSigleton();

//私有构造方法

private EagerSigleton(){

}

//静态工厂方法

public EagerSigleton getInstance(){

return m_instatnce;

}

}

fnet
2008-01-06 10:57
一下子发了两贴,怎么回事...

[该贴被fnet于2008-01-06 10:58修改过]

gougou3250
2008-01-09 22:18
1.创建singleton有两种方式 大家所谓的产生多个对象,是方法没有加同步引起的.

2.singleton会引起偶合么?不觉得

使用模式就是为了解偶

pandonix
2008-01-15 10:05
耦合(coupling)是元素与其它元素的连接。单态模式中的对象是全局唯一,也正是因为这样的唯一性,而被多个元素(类、模块或系统)所关联,换句话说,单态模式的对象有所变化,就会对引用它的对象造成影响。如此看来,单态模式是会造成较多的偶合。

另外,Singletone是GOF23种模式中的一种,而GOF模式并不等同于所有的设计模式。在《Applying UML and Pattens》一书中就提出了GRASP模式,其实这些模式都是OO中很普通的很基本的设计原则,例如,低耦合和高内聚就是其中之一,而在具体软件之中采用什么样的设计模式,是依据具体情况而定的。而《Applying UML and Pattens》也同样指出,低耦合和高内聚的用于评价欧选方案的模式,并非是软件设计之中必须遵循的。有时候,在特定的情况下,为了迎合其他优势,适当整加耦合是允许的,所以使用Singletone并不矛盾。

猜你喜欢