提示三

作者: 飞絮搅青冥 | 来源:发表于2022-04-02 22:57 被阅读0次

今天看第三条:使用私有构造方法或枚类强化 Singleton 属性。

文章首先介绍了两种常见的实现单例的方法。第一种是用final修饰的常量。

// Singleton with public final field
public class Elvis {
    public static final Elvis INSTANCE = new Elvis();
    private Elvis() { ... }
    public void leaveTheBuilding() { ... }
}

这样因为构造器是私有的,所以别人无法在创建出对应的实例。接着作者提醒采用反射的方法还是可以调用私有方法构造出实例,所以还要在构造器中加以判断来以防万一。这一点我是没有想到的,虽然平时自己也写过反射,但是在这种时候就联想不到反射可能带来的危害,以后需要更加重视反射。

接着第二种方法是用一个静态的工厂来实现单例。

// Singleton with static factory
public class Elvis {
    private static final Elvis INSTANCE = new Elvis();
    private Elvis() { ... }
    public static Elvis getInstance() { return INSTANCE; }
    public void leaveTheBuilding() { ... }
}

同样是私有的构造器,这次连实例对象也是私有的了,都靠getInstance的静态方法来实现细节。它相比前一种方法就更灵活,在不改变API的前提下,就可以改变该类是否单例的实现。其次它可以通过方法引用(method reference)作为提供者,例如 Elvis::instance 等同于 Supplier<Elvis> 。

最后作者还介绍了java1.5以后支持的用单例来实现singleton的方法。

// Enum singleton - the preferred approach
public enum Elvis {
    INSTANCE;
    public void leaveTheBuilding() { ... }
}

这种方式类似于公共属性方法,但更简洁,无偿地提供了序列化机制,并提供了防止多个实例化的坚固保证,即使是在复杂的序列化或反射攻击的情况下。这种方法可能感觉有点不自然,但是单一元素枚举类通常是实现单例的最佳方式。但是如果单例必须继承 Enum 以外的父类(尽管可以声明一个Enum 来实现接口),那么就不能使用这种方法。

想想我们系统中的单例,一般常见的都是通过 getInstance 方法来获取的,好像很少看到通过单一元素枚举来实现的,确实这样做需要新建一个枚举类,可能更为麻烦,有机会自己可以实现一个这样的单例来比较一下。

相关文章

  • 提示三

    今天看第三条:使用私有构造方法或枚类强化 Singleton 属性。 文章首先介绍了两种常见的实现单例的方法。第一...

  • 温馨提示(三)

    1、常锻炼自己用三言两语情的来龙去脉讲清楚,是一种很重要的能力。 2、经得起打磨,耐得住寂寞,扛得起责任,人生才会...

  • 小学生作文中的语言描写练习(二)提示语的不同用法

    提示语的类型分为三种:提示语在前,提示语在后,提示语在中间。三种用法的表达形式和表达效果各有不同。 提示语在前。老...

  • 提示3-5

    今天继续学习本书的提示3-5。提示本身很简单: 提示三:你有权选择提示四:提供选择,别找借口提示五:不要放任破窗 ...

  • 在Swift中调用MBProgressHUD

    代码很简单,罗列了三种类型,分别是默认的菊花提示、纯文本提示、自定义视图提示。默认提示: 效果图: 纯文本提示: ...

  • 根据金庸武侠,猜人物

    根据提示猜一枚金庸武侠小说里的人物 提示一,此人对师父绝对忠诚 提示二,此人心机颇深 提示三,此人得师父真传 提示...

  • iOS笔记之四种拨号方式

    方法一:不弹出提示直接拨打 方法二: 会弹出提示 方法三: 会弹出提示 以上是正常的三种拨号方式,会有卡顿,网络上...

  • 三点提示

    通过《肖申克的救赎》这部电影,我得到的几点启发,一个人要改变目前的状态,先是要遵循内心价值观的选择,这样更容易把一...

  • 小程序-提示语/框

    GitHub 代码地址 一. 消息提示框 二. 隐藏消息提示框 三. loading提示框 四. 隐藏loadin...

  • 每天擦化妆品的行为提示我每天吃维E

    福格说常见提示分三种:身体提示,情景提示和行为提示。最可靠的是行为提示。 我们每天生活是由一系列的行为组成的,早起...

网友评论

      本文标题:提示三

      本文链接:https://www.haomeiwen.com/subject/dwmxsrtx.html