相关疑难解决方法(0)

单身人士有什么不好的?

单例模式是一个缴足成员四人帮模式书,但最近似乎而是由开发者世界孤立.我仍然使用相当多的单例,特别是对于工厂类,虽然你必须对多线程问题(实际上是任何类)有点小心,但我不明白为什么它们如此可怕.

Stack Overflow特别假设每个人都同意Singletons是邪恶的.为什么?

请用" 事实,参考或特定专业知识 " 支持您的答案

singleton design-patterns

1931
推荐指数
30
解决办法
48万
查看次数

比较Java枚举成员:==或equals()?

我知道Java枚举被编译为具有私有构造函数和一堆公共静态成员的类.当比较给定枚举的两个成员时,我总是使用.equals(),例如

public useEnums(SomeEnum a)
{
    if(a.equals(SomeEnum.SOME_ENUM_VALUE))
    {
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,我刚刚遇到一些使用equals运算符==而不是.equals()的代码:

public useEnums2(SomeEnum a)
{
    if(a == SomeEnum.SOME_ENUM_VALUE)
    {
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我应该使用哪个运营商?

java enums

1645
推荐指数
11
解决办法
62万
查看次数

793
推荐指数
17
解决办法
30万
查看次数

关于设计模式:我什么时候应该使用单身人士?

荣耀的全球变量 - 成为一个荣耀的全球阶级.有人说打破面向对象的设计.

给我一些场景,除了好的旧记录器,使用单例是有意义的.

singleton design-patterns

421
推荐指数
14
解决办法
21万
查看次数

使用同步方法而不是同步块是否有优势?

任何人都可以通过一个例子告诉我同步方法优于synchronized块的优势吗?

java concurrency multithreading locking synchronized

397
推荐指数
13
解决办法
28万
查看次数

Singleton:如何使用它

编辑:从另一个问题我提供了一个答案,链接到很多关于单身人士的问题/答案:有关单身人士的更多信息:

所以我读过Singletons的帖子:好的设计还是拐杖?
争论仍然激烈.

我认为单身人士是一种设计模式(好的和坏的).

Singleton的问题不是模式而是用户(对不起所有人).每个人和他们的父亲都认为他们可以正确地实施一个(而且从我做过的许多采访中,大多数人都做不到).此外,因为每个人都认为他们可以实现正确的Singleton,他们滥用模式并在不合适的情况下使用它(用Singletons替换全局变量!).

所以需要回答的主要问题是:

  • 什么时候应该使用Singleton
  • 如何正确实现Singleton

我对这篇文章的希望是,我们可以在一个地方收集(而不是谷歌和搜索多个网站)一个权威的来源,了解何时(以及如何)正确使用单身人士.同样合适的还有一份反用法和常见的不良实施清单,解释了为什么他们无法工作以及为了实现他们的弱点.


所以让球滚动:
我会举起手来说这是我用的,但可能有问题.
我喜欢"Scott Myers"在他的书"Effective C++"中处理这个主题

使用单身人士的好情况(不是很多):

  • 记录框架
  • 线程回收池
/*
 * C++ Singleton
 * Limitation: Single Threaded Design
 * See: http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
 *      For problems associated with locking in multi threaded applications
 *
 * Limitation:
 * If you use this Singleton (A) within a destructor of another Singleton (B)
 * This Singleton (A) must be fully constructed before the constructor of (B)
 * is called.
 */
class MySingleton
{ …
Run Code Online (Sandbox Code Playgroud)

c++ singleton design-patterns

285
推荐指数
9
解决办法
17万
查看次数

什么是单身人士的替代品

我们有一个类,用于保存应用程序的配置信息.它曾经是一个单身人士.经过一些建筑评论后,我们被告知要删除单身人士.我们确实看到了在单元测试中不使用单例的一些好处,因为我们可以同时测试不同的配置.

如果没有单例,我们必须在代码中的任何地方传递实例.它变得如此混乱,所以我们编写了一个单独的包装器.现在我们将相同的代码移植到PHP和.NET,我想知道是否有更好的模式我们可以用于配置对象.

java singleton design-patterns

112
推荐指数
3
解决办法
4万
查看次数

在Java中使用Enum作为单例的最佳方法是什么?

基于SO问题编写的最佳单例实现在Java中 - 即使用枚举创建单例 - 有什么区别/优点/缺点(构造函数省略)

public enum Elvis {
    INSTANCE;
    private int age;

    public int getAge() {
        return age;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后打电话 Elvis.INSTANCE.getAge()

public enum Elvis {
    INSTANCE;
    private int age;

    public static int getAge() {
        return INSTANCE.age;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后打电话 Elvis.getAge()

java singleton

85
推荐指数
4
解决办法
8万
查看次数

单身人士:好的设计还是拐杖?

单身人士是一个备受争议的设计模式,所以我对Stack Overflow社区对它们的看法感兴趣.

请提供您的意见的原因,而不仅仅是"单身人士是懒惰的程序员!"

这是一篇关于这个问题的相当不错的文章,虽然它反对使用Singletons: scientificninja.com:performant-singletons.

有没有人对他们有任何其他好文章?也许是为了支持单身人士?

language-agnostic singleton design-patterns

67
推荐指数
11
解决办法
2万
查看次数

编程中单例的目的

这无疑是一个相当宽松的问题.我目前对单身人士的理解是,他们是一个你设置的类,只有一个实例被创建.

这对我来说听起来很像静态类.主要区别在于,对于静态类,您不能/不能实例化它,您只需使用它Math.pi().使用单例类,你仍然需要做类似的事情

singleton firstSingleton = new singleton();
firstSingleton.set_name("foo");

singleton secondSingleton = new singleton();
Run Code Online (Sandbox Code Playgroud)

如果我错了,请纠正我,但firstSingleton == secondSingleton现在,是吗?

secondSingleston.set_name("bar");
firstSingleton.report_name(); // will output "bar" won't it?
Run Code Online (Sandbox Code Playgroud)

请注意,我独立询问这种语言,更多关于这个概念.所以我并不担心实际上如何编写这样一个类,但更多的是为什么你不愿意和你需要考虑什么.

language-agnostic theory singleton

50
推荐指数
2
解决办法
2万
查看次数

Singleton中的线程安全性

我知道Java中的双重锁定已被破坏,那么在Java中使单例线程安全的最佳方法是什么?我想到的第一件事是:

class Singleton{
    private static Singleton instance;

    private Singleton(){}

    public static synchronized Singleton getInstance(){
        if(instance == null) instance = new Singleton();
        return instance;
    }
}
Run Code Online (Sandbox Code Playgroud)

这有用吗?如果是这样,它是最好的方式(我想这取决于具体情况,所以说明特定技术最好的时候会有用)

java singleton multithreading

13
推荐指数
3
解决办法
6553
查看次数