单例设计模式就是保证整个软件系统中,某个类只能存在一个对象实例,并且该类只提供一个取得该对象的方法。
单例设计模式包括两种:饿汉式和懒汉式。
饿汉式:
含义:
在类加载时就创建并初始化单例对象。这种方式确保了多线程环境下保持单例的唯一性
对象通常是重量级对象,饿汉式可能造成创建了对象,但是没有使用。
步骤:
- 构造器私有化===》防止直接new
- 类的内部创建对象
- 向外暴露一个静态的公开方法
整体就是,用static修饰一个对象,然后将构造器私有化,保证外界无法调用构造器,然后向外暴露一个static修饰的public方法,该方法能返回该目标对象,所以只能在这个方法调用目标对象。
那为什么说是饿汉式:原因是,对象用static修饰后,在编译时就以创建并初始化完毕,显得很着急,所以叫饿汉式。
懒汉式:
含义:
懒汉式是一种延迟加载的方式来创建单例对象,单例对象在首次被请求时才会被实例化
步骤:
-
构造器私有化
-
定义一个静态属性对象
-
提供一个public的static方法,可以返回一个对象
-
懒汉式,只有当用户使用时,才返回该对象,后面再次调用,会返回上次创建的对象
-
从而保证了单例 不会调用构造器,因为没有创建一个对象
案例:
class caT {private String name;public static int n1 = 999;private static caT cat;//定义一个静态属性对象 默认为空private caT(String name) {System.out.println("构造器被调用");this.name = name;}public static caT getInstance(){if(cat == null){//如果没有创建cat对象 第二次就不为空,就不会调用了cat = new caT("旺财");//这里创建了caT对象,会调用构造器}return cat;}}
只有调用是才进行初始化对象。