单例模式

单例模式的目的

  为了保证在一个进程中,某个类有且仅有一个实例。 因为这个类只有一个实例,因此,自然不能让调用方使用 new Xyz () 来创建实例了。 所以,单例的构造方法必须是 private ,这样就防止了调用方自己创建实例,但是在类的内部,是可以用一个静态字段来引用唯一创建的实例的: 那么问题来了,外部调用方如何获得这个唯一实例? 通过 public static 方法返回此唯一实例,使外部调用方能获取到实例。 Java标准库有一些类就是单例,例如 Runtime 这个类

一个类对外只提供一个对象!
a. 构造器私有化(不让外界new对象)
b. 在本类内实例化一个对象,然后让外界可以获取到

单例模式代码

1 public class Single {
2     // 方式一:
3     private static final Single SINGLE = new Single();
4     private Single(){}
5 
6     public static Single getSingle(){//该方法需要通过类名调用!
7         return SINGLE;
8     }
9 }
1 public class Single {
2     // 方式二:
3     public static final Single SINGLE = new Single();
4     private Single(){}
5 }
1 public class Single {
2     // 方式三:
3     public static final Single SINGLE;
4     static {
5         SINGLE=new Single();
6     }
7     private Single(){}
8 }
public class Single {
    //方式四:该方式存在一定的线程安全问题!
    private static Single SINGLE;
    private Single(){}

    public static Single getSingle(){//该方法需要通过类名调用!
        if(SINGLE==null)
            SINGLE=new Single();
        return SINGLE;
    }
}

① 懒汉式
方式四属于懒汉式
特点:只有你要的时候,我才给你准备对象
② 饿汉式
方式一二三属于饿汉式
特点:不管你要不要,类加载的时候,对象已经准备好

 

上一篇:Datawhale numpy下 Task01 输入和输出 打卡


下一篇:单例模式——懒汉式、饿汉式