单例设计模式就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。单例模式分为:饿汉式和懒汉式。
饿汉式:
步骤:
1,构造器私有化,防止直接 new;
2,类的内部创建对象(该对象是static);
3,向外暴露一个静态的公共方法。
4,代码实现
class A {
private String name;
private static A a = new A("张三");
private A (String name) {
this.name = name;
}
public static A aa () {
return a;
}
}
饿汉式只要类加载了,对象就会创建,不管有没有使用该对象。
懒汉式:
步骤:
1,构造器私有化,防止直接 new;
2,定义一个static静态属性对象;
3,提供一个public的static方法,返回B对象
4,懒汉式,只有用户使用bb方法时,才返回对象,然后再次调用时,会返回上次创建的b对象。
class B {
private String name;
private static B b;
private B (String name) {
this.name = name;
}
public static B bb () {
if(b == null) {
b = new B;
}
return b;
}
}
在类加载的时候静态属性和静态代码块会被调用,但是静态方法不会。
饿汉和懒汉的区别:
1,二者最主要的区别在于创建对象的时机不同;饿汉是在类加载的时候就创建了对象实例,而懒汉式是在使用时才创建;
2,饿汉式不存在线程安全问题,饿汉式存在线程安全问题。
3,饿汉式存在浪费资源的可能。如果程序员一个对象实例都没有使用,那饿汉式创建的对象就浪费了,而懒汉式因为是使用时才创建所以不会。