Java 设计模式-创建型设计模式-单例模式

一、单例模式

是一种创建模式,这种模式只设计一个单独的类,它负责创建自己的对象。
1.有且只有一个实例对象
2.必须自行创建实例--
3.必须自行向整个系统提供这个实例

1.只提供私有的构造方法
2.含有一个该类的私有静态实例
3.提供一个公有的静态方法用于创建、获取静态私有对象

实现单例模式的两种方法:

public class SingletonOne {
    /**
     * 创建一个私有的构造方法
     */
    private SingletonOne() {

    }

    /**
     * 提供一个该类私有的静态实例
     */
    private static SingletonOne instance = new SingletonOne();

    /**
     * 提供一个公有的静态方法返回静态实例对象
     */
    public static SingletonOne getInstance() {
        return instance;
    }

}

在实例化该类私有的静态实例时,可以先设置为null,在提供公共静态方法时再实例化。
第一种方法是空间换时间 第二种是属于时间换空间;

    private  static SingletonOne instance =null;

    public  static  SingletonOne getInstance(){
        if(instance==null){
            instance= new SingletonOne();
        }
        return  instance;
    }

测试类中打印

public class SingletonTest {

    public static void main(String[] args) {
// 这种调用方式会报错 因为静态实例被设置为private
//        SingletonOne one = new SingletonOne(); 
        SingletonOne one = SingletonOne.getInstance();
        SingletonOne two = SingletonOne.getInstance();
        System.out.println(one==two);
    }
}
二、单例模式的优点和缺点

优点
1.在内存中只有一个对象,节省内存空间
2.避免频繁的创建和销毁,提高性能
3.避免对公共资源的占用

缺点
1.扩展比较困难
2.如果实例化后对象长期不用,系统将默认为垃圾进行回收,造成对象状态丢失

三、单例模式适用场景

1.创建对象时占用资源过多,但同时又需要用到该类对象
2.对系统内资源要求统一读写,如读写配置信息
3.当多个实例存在可能引起程序逻辑错误,如号码生成

你可能感兴趣的:(Java 设计模式-创建型设计模式-单例模式)