博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用私有构造器或者枚举类型强化Singleton属性
阅读量:4230 次
发布时间:2019-05-26

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

实现Singleton一般方法:

public class Elvis implements Serializable{    private static final Elvis INSTANCE=new Elvis();    private Elvis(){    }    public static Elvis getInstance(){        return  INSTANCE;    }
}
当然也有需要使用的时候才初始化的方法,这样就要考虑线程安全的问题。

这种初始化的方法在一般使用的时候可以保证是同一个对象,但是在持久化的时候就会出现问题,

持久化过后就会变成两个对象。

示例:

public static void main(String[] args){    File file=new File("hello");    if(!file.exists()){        try {            Elvis elvis=getInstance();            file.createNewFile();            ObjectOutputStream objectOutputStream=new ObjectOutputStream(new FileOutputStream(file));            objectOutputStream.writeObject(elvis);            objectOutputStream.close();            ObjectInputStream objectInputStream=new ObjectInputStream(new FileInputStream(file));            Elvis elvis1=(Elvis)objectInputStream.readObject();            if(elvis1!=null){                System.out.println(elvis1==elvis);            }        } catch (Exception e) {            e.printStackTrace();        }    }}
false

这种时候,可以添加一个方法解决:

private Object readResolve(){    return INSTANCE;}
true

这种方式的实现比较复杂,

java1.5发行版本起,实现singleton还有第三种方法,只需要编写一个包含单个元素的枚举类型:

public enum  EumTest {    MYENUM;    public void Test(){        System.out.println("Hello");    }    public String speak(String str){        return  str;    }}
public class Test {    public static void main(String[] args){        EumTest eumTest=EumTest.MYENUM;        System.out.println(eumTest.speak("Hello,tom"));        eumTest.Test();        EumTest eumTest1=EumTest.MYENUM;        eumTest1.Test();        System.out.println(eumTest==eumTest1);    }}
true

该方式也无偿提供了序列化机制,绝对防止多次实例化。

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

你可能感兴趣的文章
C++数据结构——链队列(基本代码实现与案例)
查看>>
C++数据结构——顺序表的查找(简单顺序查找、有序表的二分查找、索引顺序的查找)
查看>>
Hive 常用统计查询语句
查看>>
对象存储产生背景、发展历史、原理架构、优缺点、应用场景及开源项目对比
查看>>
Apache Ozone 分布式对象存储系统相关文档汇总
查看>>
Ozone 与 HDDS 的区别与联系
查看>>
maven失败测试用例rerun插件使用方法
查看>>
Python基础(三)
查看>>
Python入门NLP(二)
查看>>
四行Python代码,你也能从图片上识别文字!
查看>>
内网映射外网工具-ngrok
查看>>
Python带你朗读网页
查看>>
关于python,这些知识点你学会了吗?
查看>>
利用selenium爬取《西虹市首富影评》
查看>>
Python验证码识别
查看>>
机器学习、NLP和Python教程分享
查看>>
AWS Serverless培训分享
查看>>
python生成二维码
查看>>
在ubuntu上搭建文件服务器
查看>>
ServiceFabric: 在Windows上创建容器应用并部署到ServiceFabric中
查看>>