Singleton Design Pattern-Java
本问题已经有最佳答案,请猛点这里访问。
下一组实施单一模式吗?我真的很困惑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
谢谢
不,没有。除了线程安全和类型安全问题,我可以很容易地得到两个不同的
1 2 3 | Customer x = Customer.getInstance("first"); Customer y = Customer.getInstance("second"); System.out.println(x == y); // false |
所以不是单件的。这是一种工厂/飞重模式的混合,但它肯定不是单件模式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class SingltonPattern { private static SingltonPattern instance = null; protected SingltonPattern() {} public static SingltonPattern getInstance() { if (instance == null) { // Thread Safe - Second layer synchronized (SingltonPattern.class) { if (instance == null) { instance = new SingltonPattern(); } } } return instance; } |
这是一个关于singlton-dp的模式。
它不是。在给定的示例中,将为每个不同的客户名称创建一个新的客户实例。这不应该发生在单身的情况下。应该只有一个为所有客户名称创建和共享的客户实例。客户实例需要是私有静态的,并且只应创建和分配一次。
单例设计模式是最简单的设计模式之一,它确保只能创建类的一个对象,并提供对该实例的全局访问点。
它属于创造性设计模式,因为它提供了创建对象的最佳方法之一。
当我们只需要类的一个实例(例如多个对象共享的单个DB连接)时,这很有用,因为为每个对象创建单独的DB连接可能代价高昂。同样,应用程序中可以有一个配置管理器或错误管理器来处理所有问题,而不是创建多个管理器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Singleton { private static Singleton instance; // private constructor to restrict the instantiation of Singleton Class private Singleton() { } //GetInstance method to provide global access to Singleton instance public static Singleton getInstance() { if (instance==null) instance = new Singleton(); return instance; } } |
更多详情请参考帖子