繁体   English   中英

单身人士课程

[英]Singleton classes

Singleton类和具有所有静态成员的类(即方法和属性)之间是否存在任何差异。

我找不到任何'所有静态成员类'不能实现与正确实现Singleton模式的类相同的功能的实例?

例如。 java.lang.Runtime是一个合适的Singleton类,而java.lang.System有所有静态访问方法,只有一个私有构造函数来避免外部构造。 有没有人知道为什么像Runtime这样的类被制作成Singleton而没有像java.lang.System那样实现。

仅仅因为它是一个更清洁的设计(即更真实地模仿一个对象)还是在这里有一些性能优势?

是的,有区别 - 单身人士可以实现一个界面。

此外,从外部看起来像单身的东西实际上可以通过不同的类来实现 ,其中单例访问方法(例如Runtime.getRuntime() )可以在执行时创建正确的实例。 我不是说这就是这里发生的事情,但这是一个选择。

那么你可以使用Serializable接口(在Java上)序列化和反序列化一个对象(以及一个Singleton),但不能使用静态类。

单例实例化一次。

永远不会实例化静态类。

GoF引用的单例的主要目的是提供多态服务,其中单例是抽象基类,具体类型在运行时决定。 当然,程序中只能有一个。

我相信你所谓的单身人士与原则上所有静态方法/成员的阶级之间没有区别。 事实上,我认为创建一个包含所有静态成员的类是实现单例习语的一种方式。 好吧,也许在Java中存在某种严重的差异,但我是从C ++的角度来讲。

我想你应该问最终类与私有构造函数和静态类之间有什么不同。 因为singleton是一个类,实现依赖于编程这个类的程序员。 它与询问对象和静态类之间的差异是一样的。

可以扩展类以创建另一个单例(例如用于测试目的)或非单例类。 静态方法不能被覆盖,它们只能隐藏在子类中。

具有延迟初始化(也称为Meyers单例)的单例的常见用途是控制静态对象初始化的顺序(在C ++中,在不同的转换单元中未定义)。 在这方面,单身只是表现得像全球物体,但其构造顺序表现良好。

但是,控制破坏的顺序变得非常困难。 如果你必须依赖于以某种特定顺序被破坏的单身人士(例如,单身人士记录等级应该超过其他单身实例),请参阅Alexandrescu的书来见证这一困难。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM