2

好吧,我想知道我的应用程序在我的类中的状态之一。使用静态布尔变量还是使用具有 Getters 和 Setters 方法的 Singleton 类好。简要介绍该方法的优缺点。

4

4 回答 4

2

如果您将其设为静态以更改其他类的状态,则您已将其设为公开。静态变量的 getter 和 setter 也是没有意义的,因为它们是类变量。将变量公开也不是一个好的编程习惯。因此,更好的选择是拥有一个单例类并拥有状态变量的 getter 和 setter 方法。此外,如果您处于多线程环境中,请使变量 volatile 以进行正确同步。

于 2013-10-01T05:59:52.713 回答
1

实际上有很多充分的理由考虑使用访问器而不是直接公开类的字段——不仅仅是封装的论点和使未来的变化更容易。

以下是我知道的一些原因:

  • 封装与获取或设置属性相关的行为——这允许以后更容易地添加附加功能(如验证)。

  • 隐藏属性的内部表示,同时使用替代表示公开属性。

  • 使您的公共接口免受更改 - 允许公共接口在实现更改时保持不变,而不会影响现有消费者。

  • 控制属性的生命周期和内存管理(处置)语义 - 在非托管内存环境(如 C++ 或 Objective-C)中尤为重要。

  • 为属性在运行时更改时提供调试拦截点 - 在某些语言中,如果没有此属性,调试属性更改为特定值的时间和地点可能会非常困难。

  • 改进了与旨在针对属性 getter/setter 操作的库的互操作性 - 想到了模拟、序列化和 WPF。

  • 允许继承者更改属性行为方式的语义,并通过覆盖 getter/setter 方法来公开。

  • 允许 getter/setter 作为 lambda 表达式而不是值传递。

  • getter 和 setter 可以允许不同的访问级别——例如 get 可能是公共的,但 set 可以是受保护的。
于 2013-10-01T06:12:22.383 回答
0

单例模式与静态类相比有几个优点。

  1. 单例可以扩展类和实现接口,而静态类不能(它可以扩展类,但不继承它们的实例成员)。
  2. 单例可以延迟或异步初始化,而静态类通常在首次加载时进行初始化,从而导致潜在的类加载器问题。
  3. 不过,最重要的优势是可以多态地处理单例,而不会强迫用户假设只有一个实例。

可能会对您有所帮助。

于 2013-10-01T05:58:59.463 回答
0

黑白单例和一堆静态方法的主要区别在于单例可以实现接口,因此您可以传递单例,就好像它是“只是另一个”实现一样。

您也可以克隆 Singleton 的对象,但是我们不能克隆静态类对象。

于 2013-10-01T05:58:59.490 回答