记一篇IT培训日记027-课间演讲

03月11日   晴天    继续放弃中,爱下不下

        所在培训机构有这么一个传统,午休之后到14点半上课间,有30分钟的学生演讲时间,听蔡班主的意思,演讲目的是锻炼我们口才,应对毕业后的面试。我是奇了个怪啦,班上90多号人,2天休一天来算,毕业就轮2圈,2次演讲就能锻炼口才了?估摸着我们都是演讲奇才吧。

        今天轮到我演讲了,本来可以用固定主题:我的家乡,最后想想还是算了,就讲一下当初应对软考学得的设计模式:单例设计模式吧。

        上台前,说不紧张还是有点假,毕竟这么多人,能讲利索就可以啦,我给自己的订的最低要求。如果能得到满堂彩,那最好,哈哈,想想就好了。

       上台后,再来一次自我介绍,然后进入正题:单例设计模式讲解

        我:单例设计模式,顾名思义就是一个类有且仅有一个实例对象。根据代码实现方式不同分为:饿汉式,懒汉式,静态内部类方式,枚举方式。

饿汉式:

public class Singleton {
    //饿汉式单例
    private static Singleton instance = new Singleton();
    private Singleton(){}

    public static Singleton getInstance(){
        return instance;
    }
}

问:为啥叫饿汉呢?

答:你肚子饿了,你最想做啥,吃啊,很饿很饿时候,是不是迫不及待想去吃。饿汉式就是迫不及待想创建出一个单例出来。所以在类加载进内存马上就构建出这个唯一单例。

问:为什么使用private修饰构造器

答:单例模式,有且只有一个实例,构造器私有目的就是禁用外界对实例构建。

问:饿汉式单例模式好处是啥?

答:简单,方便,还线程安全。

懒汉式:

public class LazySingleton {
 private static LazySingleton lazySingleton = null;
 private LazySingleton() {
 }
 public static LazySingleton getInstance() {
  if (lazySingleton == null) {
     lazySingleton = new LazySingleton();
   }
   return lazySingleton;
 }
}

问:为啥叫懒汉呢?

答:懒得动的意思啊,能不动就不动。懒汉式单例操作是在获取唯一单实例时才进行实例创建。

问:懒汉式单例模式好处是啥?

答:没啥特别的好处,硬要说就是延时实例的创建,另外操作不好,还会有线程安全问题。

问:标准的懒汉式单例模式长啥样?

答:双重检查方式

public class Singleton {
     private volatile static Singleton instance;
     private Singleton() {}
     public static Singleton newInstance() {
         if (instance == null) {
             synchronized (Singleton.class) {
                 if (instance == null) {
                     instance = new Singleton();
                 }
             }
         }
        return instance;
    }
}

静态内部类:

public class Singleton {
    private static class SingletonInstance{
        private static final Singleton instance=new Singleton();
    }
    private Singleton(){}
    public static Singleton getInstance(){
        return SingletonInstance.instance;
    }

}

问:为啥叫静态内部类呢?

答:使用内部类的形式实现。

问:有啥好处啊?

答:线程安全的,有延时加载的效果,只有当调用getInstance方法时候才会加载内部类创建对象。

枚举:

public enum Singleton {
    INSTANCE;
}

问:简单粗暴,这是啥原理

答:没啥原理,枚举定义出来后,实例个数就固定了,如果约定它实例只有1个,那就是单例啦

问:有啥好处啊?

答:线程安全,调用效率高,可以天然的防止反射和反序列化调用

问:反射跟反序列是啥

答:我也不知道,后面会学

综合看,推荐使用静态内部的方式,贪方便,就使用枚举方式。

        一曲终了,附和者甚少,唉,这该死的孤独~

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪飞yes

我对钱没兴趣~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值