Java Singleton的3种实现方式详解编程语言

1、通过静态成员字段来实例化

public class Elvis { 
    /** 
     * 通过final的静态成员字段来调用私有的构造函数实例化对象 
     */ 
    public static final Elvis INSTANCE = new Elvis(); 
 
    /** 
     * 私有构造函数,防止在类以外被实例化 
     */ 
    private Elvis() { 
    } 
 
    public void leaveTheBuilding() { 
        System.out.println("Leave the building..."); 
    } 
 
    public static void main(String[] args) { 
        Elvis.INSTANCE.leaveTheBuilding(); 
    } 
}

2、通过公有的静态工厂方法

public class Elvis { 
    /** 
     * 把静态成员字段设置为私有的 
     */ 
    private static final Elvis INSTANCE = new Elvis(); 
 
    /** 
     * 私有构造函数,防止在类以外被实例化 
     */ 
    private Elvis() { 
    } 
 
    /** 
     * 通过公有的静态工厂方法导出Single实例 
     * @return Singleton实例 
     */ 
    public Elvis getInstance(){ 
        return INSTANCE; 
    } 
 
    public void leaveTheBuilding() { 
        System.out.println("Leave the building..."); 
    } 
 
    public static void main(String[] args) { 
        Elvis.INSTANCE.leaveTheBuilding(); 
    } 
}

3、通过枚举来返回,这种方式更加简洁,无偿提供了序列化机制,绝对防止多次实例化,即使在面对多次序列化和范序列化攻击的时候。虽然这种方法没有被广泛采用,但这种方式已经成为实现Singleton的最佳方法。

public class Elvis { 
    /** 
     * 把静态成员字段设置为私有的 
     */ 
    private static final Elvis INSTANCE = new Elvis(); 
 
    /** 
     * 私有构造函数,防止在类以外被实例化 
     */ 
    private Elvis() { 
    } 
 
    /** 
     * 通过包含单个元素的枚举类型来实现,推荐的方式(从Java 1.5 发行版起) 
     */ 
    public enum Elvis1 { 
        INSTANCE; 
 
        public void leaveTheBuilding() { 
            System.out.println("Leave the building..."); 
        } 
    } 
 
    public static void main(String[] args) { 
        Elvis1.INSTANCE.leaveTheBuilding(); 
    } 
}

 

Java Singleton的3种实现方式详解编程语言

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/15957.html

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

相关推荐

发表回复

登录后才能评论