单例模式

在讲单例模式之前首先要知道什么是设计模式,那么什么是设计模式呢?
百度百科是这样解释的:设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。简单地说,设计模式是可以重复利用的解决方案。
设计模式的提出是在1995 人,是由4 为作者提出的,称为GoF,也就是“四人组”。
设计模式从结构上分为三类:

  • 创建型
  • 结构性
  • 行为型

其中最简单的设计模式就是单例了,单例这种模式,尽量少用,也有将其称为“反模式”。
单例模式有什么好处 ?
1、控制资源的使用,通过线程同步来控制资源的并发访问;
2、控制实例产生的数量,达到节约资源的目的。
3、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。
常用的单例模式有两种:饿汉式、懒汉式。
单例模式的要领:
1.构造方法私有化
2.提供一个公开的静态的获取当前类型对象的方法
3.提供一个当前类型的静态变量
一、懒汉式
在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。
下面为懒汉式单例代码示例:

public class Singleton {
    // 提供一个当前类型的静态变量
    private static Singleton s;
    // 构造方法私有化
    private Singleton() {
    }
    // 提供一个公开的静态的获取当前类型对象的方法
    public static Singleton getInstance() {
        if (s == null) {
            s = new Singleton();
        }
        return s;
    }

}

二、饿汉式
在类被加载的时候,唯一实例已经被创建。
下面为饿汉式单例代码示例:

/*
 * 饿汉式单例
 */
public class Admin {

    //提供一个当前类型的静态变量,静态变量在类加载时创建,而且只执行一次
    private static Admin a = new Admin();
    // 构造方法私有化
    private Admin() {

    }
    // 提供一个公开的静态的获取当前类型对象的方法
    public static Admin getInstance() {
        return a;
    }
}

下面为测试是否是唯一实例:

public class Test {
    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        Admin a1 = Admin.getInstance();
        Admin a2 = Admin.getInstance();
        System.out.println("懒汉式单例测试:"+(s1 == s2));
        System.out.println(s1);
        System.out.println(s1);
        System.out.println("饿汉式单例测试:"+(a1 == a2));
        System.out.println(a1);
        System.out.println(a2);
    }
}

测试结果如图所示:
这里写图片描述

由图可知,无论是懒汉式还是饿汉式单例,都取得了唯一实例。


注意:==两边如果是基本数据类型,比较的是两个基本类型的大小是否想等;==两边如果是引用数据类型,则比较的是内存地址,内存地址一样说明取得的是同一个实例。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值