单例
1、所谓类的单例模式,就是采取一定的方法保证在整个的软件系统中,对某个类只存在一个对象实例,并且该类只提供一个取得其对象实例的方法
2、单例模式有两种方式:1.饿汉式2.懒汉式
实现步骤:
(1)构造器私有化=》防止直接new
(2)类的内部创建对象
(3)向外暴露一个静态的公共方法
饿汉式:
//没使用也先创建,比较饥饿
public class 单例模式饿汉式 {
public static void main(String[] args) {
GirlFriend instance1 = GirlFriend.getInstance();
System.out.println(instance1);
GirlFriend instance2 = GirlFriend.getInstance();
System.out.println(instance2);
System.out.println(instance1 == instance2);
}
}
class GirlFriend{
/*
*1、构造器私有化,防止new创建对象
*2、创建一个私有的静态对象
*3、创建一个公有的静态方法返回私有的静态对象
* */
private String name;
private static GirlFriend girlFriend = new GirlFriend("小红红");
private GirlFriend(String name) {
this.name = name;
}
public static GirlFriend getInstance(){
return girlFriend;
}
@Override
public String toString() {
return "GirlFriend{" +
"name='" + name + '\'' +
'}';
}
}
懒汉式:
//只有用的时候会创建,不用的时候不会创建,防止资源的浪费
public class 单例模式懒汉式 {
public static void main(String[] args) {
Cats instance = Cats.getInstance();
System.out.println(instance);
}
}
class Cats{
/*
* 1、对象的构造器私有化
* 2、创建静态对象,不要new
* 3、创建静态方法,当使用的时候创建并返回
* 第二次调用时会返回上次创建的对象
* */
private String name;
private static Cats cats;
private Cats(String name) {
this.name = name;
}
public static Cats getInstance(){
if(cats == null){
cats = new Cats("大黄");
}
return cats;
}
@Override
public String toString() {
return "Cats{" +
"name='" + name + '\'' +
'}';
}
}