Java之创建对象>3.Enforce the singleton property with a private constructor or an enum type详解编程语言

 1. 通过一个公开的字段来获取单例

// Singleton with public final field 
public class Elvis { 
    public static final Elvis INSTANCE = new Elvis(); 
    private Elvis() { ... } 
    public void leaveTheBuilding() { ... } 
}

The main advantage of the public field approach is that the declarations make it clear that the class is a singleton: the public static field is final, so it will always contain the same object reference. There is no longer any performance advantage to the public field approach (没有任何性能优势)

2. 通过一个公开的方法getInstance()来获取单例

  
// Singleton with static factory 
public class Elvis { 
    private static final Elvis INSTANCE = new Elvis(); 
    private Elvis() { ... } 
    public static Elvis getInstance() { return INSTANCE; } 
    public void leaveTheBuilding() { ... } 
}

One advantage of the factory-method approach is that it gives you the flexibility to change your mind about whether the class should be a singleton without changing its API. The factory method returns the sole instance but could easily be modified to return, say, a unique instance for each thread that invokes it. A second advantage, concerning generic types. Often neither of these advantages is relevant, and the final-field approach is simpler.

3.通过枚举来实现

// Enum singleton - the preferred approach 
public enum Elvis { 
    INSTANCE; 
    public void leaveTheBuilding() { ... } 
}

 While this approach has yet to be widely adopted, a single-element enum type is the best way to implement a singleton.

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/15971.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论