单例设计模式和多例的区别

一.简单说下单例多例区别

1.单例设计模式
    1.解释:从名称上来讲,可以看出,它不能说是一种技术.而是一种书写代码时的设计理念
    2.实例化次数:在一个工程中只实例化一次
    3.分类:懒汉式和饿汉式
        懒汉时:什么时候用,什么时候去实例化
        饿汉时:项目启动后就加载
2.多例模式
    1.解释:我们常说的多例模式,个人认为,只是为区分单例才这么叫的,项目中天天new来new去的对象,就是多例的
    2.实例化次数:超过1次

二.单例模式中:懒汉式和饿汉式的示例代码(建议自己敲一遍实施,我用的junit测试)

1.饿汉式

// 饿汉式实体
public class TestEntity {

    private TestEntity(){
        System.out.println("实例化了才会走:我走了吗?");
    }
    // 项目启动后,加载这个bean时,直接进行了实例化
    private static  TestEntity t = new TestEntity();

    public static   TestEntity getInstance() {
        return t ;
    }

    public static  void test(){
        System.out.println("测试方法调用了我");
    }

}

    //测试饿汉
    @Test
    public void testOne() {
        TestEntity.test();
    }

    输出结果:
        实例化了才会走:我走了吗?
        测试方法调用了我
    两条打印语句,我们并没有在Junit测试类中对这个对象实例化(new对象),,证实了,他在我们调用之前自己早就早就实例化了

2.懒汉时

// 懒汉式实体
public class TestEntity2 {

    private TestEntity2(){
        System.out.println("实例化了才会走:我走了吗?");
    }

    private static  TestEntity2 t2 = null;

    public static   TestEntity2 getInstance() {
        // 不会刚上来就实例化,而使用的时候手动实例化一次
        return t2  == null? new TestEntity2(): t2;
    }

    public static  void test(){
        System.out.println("测试方法调用了我");
    }

}

  //第一次测试懒汉(现在还没实例化)
    @Test
    public void testTwo() {
        TestEntity2.test();
    }
    输出结果:
        测试方法调用了我
    我们发现,构造方法中的语句,并没有打印出来,说明此时这个对象并没有实例化

  //第二次测试懒汉(我们当作是现在业务上需要这个,去实例化一次)
    @Test
    public void testTwo() {
        TestEntity2.getInstance();
        TestEntity2.test();
    }
    输出结果:
    实例化了才会走:我走了吗?
        实例化了才会走:我走了吗?
        测试方法调用了我
    两条语句打印出来,说明我们手动实例化成功,这个时候,这个对象,就可以使用了

    对之前有人问过我的一个问题,简单说一下,就是之前有个小伙伴(初学者)问我:为什么说只能实例化一次了?
    两点:第一,private 构造方法,无法new了
        第二:三目运算符做出了判断
    知道大家都技术高深,这里结尾最后一段仅是告知那些同样没基础,刚开始玩java的小伙伴们的
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值