Java 中的单例模式(一)

java中单例模式是一种常见的设计模式, 单例模式有以下特点:

1、单例类只能有一个实例。

2、单例类必须自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

单例模式适用场景:

1. 需要生成唯一序列的环境 。

2. 需要频繁实例化然后销毁的对象。

3. 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。

4. 方便资源相互通信的环境。

public class Demo {

    public static void main(String[] args) {

        Danli a = new Danli();

        Danli b = new Danli();

        System.out.println(a == b);

    }

}

class Danli{

    public Danli(){

       

    }

}

一、恶汉式单例

特点:线程安全,调用效率高,但是不能延时加载

public class Demo {

    public static void main(String[] args) {

        Danli a = Danli.getInstance();

        Danli b = Danli.getInstance();

        System.out.println(a == b);

    }

}

class Danli{

    //1、隐藏构造器

    private Danli(){

       

    }

    //2、实例化这个类(要私有的、静态的、不可改变的)

    private static final Danli Instance = new Danli();

    //3、创建静态工厂方法,让外部可以调用

    public static Danli getInstance(){

        //恶汉式单例

        return Instance;

    }

}

输出结果如下:

 

二、懒汉式单例

特点:线程安全,调用效率不高,但是能延时加载

public class Demo {

    public static void main(String[] args) {

        Danli a = Danli.getInstance();

        Danli b = Danli.getInstance();

        System.out.println(a == b);

    }

}

class Danli{

    //1、隐藏构造器

    private Danli(){

    }

    //2、类初始化时,不初始化这个对象(延时加载,真正用的时候再创建)

    private static Danli Instance;

    //3、创建静态工厂方法 ,让外部可以获取实例

    //synchronized 同步修饰符,在多个线程中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁。

    public static synchronized  Danli getInstance(){

        if(Instance == null){

            Instance = new Danli();

        }

        return Instance;

    }

}

运行结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值