设计模式

一、单例模式

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 @   Airgity  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示