下载本文示例代码
在什么情况下使用单例模式 使用单例模式的条件 使用单例模式有一个很重要的必要条件: 在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来说,如果一个类可以有几个实例共存,那么就没有必要使用单例类。但是有经验的读者可能会看到很多不当地使用单例模式的例子,可见做到上面这一点并不容易,下面就是一些这样的情况。 例子一 问:我的一个系统需要一些"全程"变量。学习了单例模式后,我发现可以使用一个单例类盛放所有的"全程"变量。请问这样做对吗? 答:这样做是违背单例模式的用意的。单例模式只应当在有真正的"单一实例"的需求时才可使用。 一个设计得当的系统不应当有所谓的"全程"变量,这些变量应当放到它们所描述的实体所对应的类中去。将这些变量从它们所描述的实体类中抽出来, 放到一个不相干的单例类中去,会使得这些变量产生错误的依赖关系和耦合关系。 例子二 问:我的一个系统需要管理与数据库的连接。学习了单例模式后,我发现可以使用一个单例类包装一个Connection 对象,并在finalize()方法中关闭这个Connection 对象。这样的话,在这个单例类的实例没有被人引用时,这个finalize() 对象就会被调用,因此,Connection 对象就会被释放。这多妙啊。 答:这样做是不恰当的。除非有单一实例的需求,不然不要使用单例模式。在这里Connection 对象可以同时有几个实例共存,不需要是单一实例。 单例模式有很多的错误使用案例都与此例子相似,它们都是试图使用单例模式管理共享资源的生命周期,这是不恰当的。
共2页。 1 2 :
在什么情况下使用单例模式 使用单例模式的条件 使用单例模式有一个很重要的必要条件: 在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来说,如果一个类可以有几个实例共存,那么就没有必要使用单例类。但是有经验的读者可能会看到很多不当地使用单例模式的例子,可见做到上面这一点并不容易,下面就是一些这样的情况。 例子一 问:我的一个系统需要一些"全程"变量。学习了单例模式后,我发现可以使用一个单例类盛放所有的"全程"变量。请问这样做对吗? 答:这样做是违背单例模式的用意的。单例模式只应当在有真正的"单一实例"的需求时才可使用。 一个设计得当的系统不应当有所谓的"全程"变量,这些变量应当放到它们所描述的实体所对应的类中去。将这些变量从它们所描述的实体类中抽出来, 放到一个不相干的单例类中去,会使得这些变量产生错误的依赖关系和耦合关系。 例子二 问:我的一个系统需要管理与数据库的连接。学习了单例模式后,我发现可以使用一个单例类包装一个Connection 对象,并在finalize()方法中关闭这个Connection 对象。这样的话,在这个单例类的实例没有被人引用时,这个finalize() 对象就会被调用,因此,Connection 对象就会被释放。这多妙啊。 答:这样做是不恰当的。除非有单一实例的需求,不然不要使用单例模式。在这里Connection 对象可以同时有几个实例共存,不需要是单一实例。 单例模式有很多的错误使用案例都与此例子相似,它们都是试图使用单例模式管理共享资源的生命周期,这是不恰当的。
共2页。 1 2 :
下载本文示例代码
Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)Java模式设计之单例模式(二)
阅读(112) | 评论(0) | 转发(0) |