设计模式

一、单例模式

1.饿汉式

public class Person {
    //类加载就创建实例,加上final关键字,防止重复创建
    private static final Person instance = new Person();

    //私有化构造器,保证外部无法创建实例。
    private Person() {
        System.out.println("对象创建了");
    }
	//获取实例的方法
    public static Person getInstance() {
        return instance;
    }
}

2.枚举饿汉式

// enum 本身也是一个Class类
public enum Person {
    //定义一个枚举的元素,它就代表了Singleton的一个实例。
    INSTANCE;
 
    //对外部提供调用方法:将创建的对象返回,只能通过类来调用
    public Person getInstance(){
        return INSTANCE;
    }
}

3.懒汉式

public class Person {
    //保证一个类只有一个用于返回的对象
    private static Person instance;
    //私有化构造器,保证外部无法创建实例。
    private Person(){
        System.out.println("对象创建了");
    }
    //创建实例
    public static Person getInstance(){
        //如果instance为空则新 new 一个对象
        if(instance==null){
            instance = new Person();
        }
        //如果不为空,则直接返回
        return instance;
    }
}

4.DCL懒汉式

public class Person {
    //保证一个类只有一个用于返回的对象
    private static volatile Person instance;//volatile解决可见性,有序性
    //私有化构造器,保证外部无法创建实例。
    private Person(){
        System.out.println("对象创建了");
    }
    //创建实例
    public static Person getInstance(){
        //如果instance为空则新 new 一个对象
        if(instance==null){
            synchronized(Person.class){
                if(instance==null){
            		instance = new Person();
        		}
            }
        }
        //如果不为空,则直接返回
        return instance;
    }
}

5.内部类懒汉式

public class Person {
    //私有化构造器,保证外部无法创建实例。
    private Person(){
        System.out.println("对象创建了");
    }
    
    private static class Holder{
        static Person INSTANCE = new Person();
    }
    //创建实例
    public static Person getInstance(){
        return Holder.INSTANCE;
    }
}

持续更新.............

posted @ 2022-11-10 22:59  Airgity  阅读(17)  评论(0编辑  收藏  举报