博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java Singleton的3种实现方式
阅读量:6580 次
发布时间:2019-06-24

本文共 1465 字,大约阅读时间需要 4 分钟。

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();    }}

 

 

转载地址:http://wlnno.baihongyu.com/

你可能感兴趣的文章
一个有趣的命令
查看>>
我的友情链接
查看>>
已发布13集网站开发技术视频:http://blog.sina.com.cn/s/blog_67d27f340102vf7l.html
查看>>
Mysql ibdata 丢失或损坏如何通过frm&ibd 恢复数据
查看>>
MySQL数据库的优化(二)
查看>>
Deepin OS和WIN7双启动 花屏原因一例
查看>>
UIMenuController—为UITextField禁用UIMenuController功能
查看>>
Protobuf使用不当导致的程序内存上涨问题
查看>>
【原创】扯淡的Centos systemd与Docker冲突问题
查看>>
Spring+Mybatis多数据库的配置
查看>>
给大家推荐一个免费下载名称读写ntfs软件的地方
查看>>
在MySQL数据库建立多对多的数据表关系
查看>>
突然停电或死机导致没保存的文件怎么找回
查看>>
dockerfile文件创建镜像详解
查看>>
kudu
查看>>
jquery.validate.min.js表单验证使用
查看>>
在JS中捕获console.log的输出
查看>>
Python扫描IP段指定端口是否开放(一次扫描20个B网段没问题)
查看>>
一些常用的WebServices
查看>>
CentOS7使用firewalld打开关闭防火墙与端口
查看>>