一个类在一个项目里面只有一个对象,常用在读取一些配置文件信息,这些信息要求在所有对象里面值都是一致的。这样设计出单例,保证了对象里面的值是一致的。这里可以使用static修饰类,但是这样会导致静态资源过多,声明周期过长,占内存。设计单例模式,不用这个对象的话,会自动回收,减少内存消耗。
package com.dhcc.project; public class MoShi { private MoShi() { super(); } public static MoShi moShi; public static MoShi getMoShi() { if (moShi == null) { moShi = new MoShi(); } return moShi; } }无参构造私有化,调用不到无参。静态方法中new对象,使用类调用得到对象,用静态属性接收这个对象。注意成员变量必须是静态的,不然静态方法里面属性不是静态的,就不能使用,报错。
方法也必须是静态的,因为不能new对象,只能通过类调用。
public static MoShi moShi = new MoShi(); 这样写也可以获取单例,但是不可控,写在方法里面可控,成员变量一般都是私有化。方法时公有的,可以提供条件,满足条件才可以获取单例,不满足不能获取。这就叫可控!
单例分为恶汉和懒汉:
private static MoShi moShi = new MoShi(); 饿汉,初始化的时候就加载
饿汉好处天然线程安全,加载类的时候是安全的。
private static MoShi moShi;这是懒汉式,延迟加载,用的时候再加载。
使用懒汉式最好加上同步,在并发量高的时候防止线程安全问题出现。
