1.单例模式——》1.饿汉式 2.懒汉式
1.饿汉式
/**
* @version 1.0
* function: 单例模式的经典应用 1.饿汉式,
* author:阿卜杜赛麦提
* @date:2022/12/29 13:25
*/
//1.构造器私有化
//2.在该类里面创建,静态的对象
//3.提供一个公用的方法返回该类的对象
/**
* //存在的问题——》在来加载时创建对象(如我们用该类的一个静态属性是发生类加载此时同时创建该类的对象如果我们没用到该对象——》这导致资源浪费)
* */
public class GirlFriend {
private String name;
public static int a1=100;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//构造器私有化
private GirlFriend(String name) {
System.out.println("new对象是构造器被调用");
this.name = name;
}
/**
* 创建该类的静态的对象————》类加载时自动创建对象
* */
static GirlFriend girlFriend=new GirlFriend("小花");//类加载时初始化
public static GirlFriend getGirlFriend(){
return girlFriend;
}
}
class TTst{
public static void main(String[] args) {
//两个都是同一个对象
// GirlFriend Gir= GirlFriend.getGirlFriend();
// GirlFriend Gir1= GirlFriend.getGirlFriend();
// System.out.println(Gir.getName());//小花
// System.out.println(Gir1.getName());//小花
// System.out.println(Gir1==Gir); //true
System.out.println(GirlFriend.a1);// 1.new对象是构造器被调用 2.100
}
}
2.懒汉式
/**
* @version 1.0
* function:单例模式 2.懒汉式
* author:阿卜杜赛麦提
* @date:2022/12/29 14:35
*/
//1.构造器私有化
//2.在该类里面创建,静态的对象
//3.提供一个公用的方法返回该类的对象
/**
* //存在的问题——》存在线程安全问题
* */
public class Cat {
private static Cat cat=null;
public static int a1=200;
private String name;
//构造去私有化
private Cat(String name) {
System.out.println("构造器被调用");
this.name = name;
}
//这个方法被调用是创建该类的对象并返回
public static Cat getCat(){
if (cat==null){
cat=new Cat("小黄猫");
}
return cat;
}
}
class CatTest{
public static void main(String[] args) {
System.out.println(Cat.a1);
Cat cat=Cat.getCat();
//首先输出200
//再输出构造器被调用
}
}