定义:单例模式是确保一个类在任何情况下都只有一个实例,并提供一个全局访问点。单例模式属于创建型模式。
单例模式在现实生活中用的比较广泛,比如公司总经理,国家主席等,在j2EE中 ServletContext;spring 中ApplicationContext,数据库的连接池都是使用单例。
单例模式可以有如下几种实现方式:饿汉、懒汉、枚举、内部类。
饿汉
懒汉
内部类
反射破坏单例模式
序列化破坏单例
-
由于jvm底层首先判断单例类是否存在构造方法,存在则创建一个新对象,不存在返回null,如果单例类有readResolve()方法,则返回之前创建的对象实例,但是之前判断是否存在构造创建的实例一样会创建 只不过没有用 后被jvm回收。点击序列化代码readObject进去可知
枚举单例
单例模式
- 优点
- 在内存中只有一个实例,减少了内存开销。
- 可以避免对资源的多重占用。
- 设置全局访问点,严格控制访问
- 缺点
* 没有接口,扩展困难。
* 如果要扩展单例对象,只有修改代码,没有其他途径。