一、什么是单例模式
单例模式就是采取一定的方法,保证在整个软件系统中,对某个类只能存在一个对象实例,并且该对象只提供一个取得其对象实例的方法。
二、饿汉模式
实现步骤:1、构造器私有化
2、在类的内部创建对象
3、向外暴露一个静态的公共方法用来调用
4、代码实现举例
public class single {
public static void main(String[] args){
// girlfriend friend = girlfriend.getInstance();
// System.out.println(friend);
System.out.println(girlfriend.b);
}
}
//单例模式——饿汉模式
class girlfriend{
private String name;
public static int b = 100;
private static girlfriend xh = new girlfriend("小红");
//构造器私有
private girlfriend(String name) {
System.out.println("构造器被调用");
this.name = name;
}
//提供全局访问点
public static girlfriend getInstance(){
System.out.println("单列模式被调用");
return xh;
}
@Override
public String toString() {
return "girlfriend{" +
"name='" + name + '\'' +
'}';
}
}
三、懒汉模式
实现步骤:1、构造器私有化
2、定义一个static静态属性对象。
3、提供一个public的static方法,可以返回一个对象。
4、代码实现举例
public class lazy {
public static void main(String[] args){
cat cat = com.company.cat.gteCat();
System.out.println(cat);
// System.out.println(cat.a);
}
}
//单例模式-懒汉模式
class cat{
public static int a = 100;
private String name;
private static cat tom;
private cat(String name) {
this.name = name;
System.out.println("构造器被调用");
}
//返回一个对象
public static cat gteCat(){
System.out.println("懒汉模式启动");
cat cat = new cat("tom");
return cat;
}
@Override
public String toString() {
return "cat{" +
"name='" + name + '\'' +
'}';
}
}
四、饿汉模式 vs 懒汉模式
1、二者最主要的区别在于创建对象的时机不同,饿汉式是在类加载时就创建了对象实例,而懒汉式是在使用时才创建
2、饿汉式不存在线程安全问题,懒汉式存在。
3、饿汉式可能会存在资源的浪费,有可能创建了但未使用,而懒汉式在使用时才创建,不存在这个问题。