首页 > 其他分享 >【设计模式】单例模式——单例模式的饿汉式和枚举式实现

【设计模式】单例模式——单例模式的饿汉式和枚举式实现

时间:2024-01-04 19:32:17浏览次数:37  
标签:Singleton 单例 枚举 饿汉 设计模式 data public

饿汉式

单例模式的最简单实现如下:

public class Singleton implements Serializable {
    private static Singleton instance = new Singleton();
    private Singleton(){}

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

这种写法被称为“饿汉式”,在类加载阶段就初始化单例对象,因为是在线程出现之前实例化,所以不存在线程安全问题。

饿汉式开发效率和执行效率都比较高,也不存在线程安全问题,但饿汉式实现的单例从进程/虚拟机创建开始就占用一部分内存,并且容易被clone()方法、反射和反序列化破坏。

枚举式

正如所有被class修饰的类都是java.lang.Obejct的子类一样,所有被enum修饰的类也都是java.lang.Enum的子类,

public enum EnumSingleton {
    INSTANCE;

    private Object data;

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public static EnumSingleton getInstance(){return INSTANCE;}
}

因为JDK的内部机制,枚举式单例是线程安全的,也不存在被clone()方法、反射和反序列化破坏的问题。

又因为枚举式本质上也是一种饿汉式,所以也存在从一开始就占有部分内存的问题。

标签:Singleton,单例,枚举,饿汉,设计模式,data,public
From: https://blog.51cto.com/dongfeng9ge/9104199

相关文章

  • 软件体系结构与设计模式之适配器模式
    一.单选题(共4题,8分)(单选题,2分)当想使用一个已经存在的类,但其接口不符合需求时,可以采用()设计模式将该类的接口转换成我们希望的接口。A.命令(Command)B.适配器(Adapter)C.装饰(Decorator)D.享元(Flyweight)我的答案:B:适配器(Adapter);正确答案:B:适配......
  • 软件体系结构与设计模式之桥接模式
    一.单选题1.桥接设计模式将抽象部分与它的实现部分相分离,使它们都可以独立地变化。下图为该设计模式的类图,其中,()用于定义实现部分的接口。A.AbstractionB.ConcreteImplementorAC.ConcreteImplementorBD.Implementor我的答案:D:Implementor;正确答案:D:Implementor......
  • 软件体系结构与设计模式之组合模式
    一.单选题(共4题)(单选题)一个树形文件系统体现了()模式。A.Decorator(装饰)B.Composite(组合)C.Bridge(桥接)D.Proxy(代理)我的答案:B:Composite(组合);(单选题)以下关于组合模式的叙述错误的是()。A.组合模式对叶子对象和组合对象的使用具有一致性B.组合模式可......
  • 软件体系结构与设计模式之装饰模式和外观模式
    一.单选题(共4题)(单选题)某公司欲开发一个图形控件库,要求可以在该图形控件库中方便地增加新的控件,而且可以动态地改变控件的外观或给控件增加新的行为,如可以为控件增加复杂的立体边框、增加控件的鼠标拖拽行为等。针对上述需求,使用()模式来进行设计最合适。A.适配器(Adap......
  • 软件体系结构与设计模式之享元模式和代理模式
    一.单选题(共6题)(单选题)在享元模式中,外部状态是指()。A.享元对象可共享的所有状态B.享元对象可共享的部分状态C.由享元对象自己保存和维护的状态D.由客户端保存和维护的状态我的答案:D:由客户端保存和维护的状态;正确答案:D:由客户端保存和维护的状态;(单选......
  • 软件设计模式与体系结构之运算器的设计
    实验目的与要求 深刻理解面向对象编程思想与设计原则,熟悉Java语言中类的声明、属性的声明、方法的定义、对象的创建与使用等语法知识,能够根据具体问题完成对象的抽象、类的定义及程序的编写,并在程序中使用适当的设计原则,初步体验面向对象编程的优点。实验内容 使用Java语言编写一......
  • 软件设计模式与体系结构之简单工厂模式和工厂方法模式
    一、实验目的掌握简单工厂模式和工厂方法模式的概念,能够灵活使用简单工厂模式和工厂方法模式解决相关问题。二、实验内容场景描述一:在某OA系统中,系统根据对比用户在登录时输入的账号和密码以及在数据库中存储的账号和密码是否一致来进行身份验证,如果验证通过,则取出存储在数据......
  • 软件设计模式与体系结构之抽象工厂模式与建造者模式
    实验三:抽象工厂模式与建造者模式一、实验目的掌握抽象工厂模式和建造者模式的概念,能够灵活使用抽象工厂模式和建造者模式解决相关问题。二、实验内容场景描述一:某手机游戏软件公司欲推出一款新的游戏软件,该软件能够支持Symbian和Android等多个主流的手机操作系统平台,针对不同......
  • 【设计模式】单例模式——反序列化破坏单例模式的情景
    一个单例对象创建好之后,有时候需要将对象序列化然后进行数据持久化,下次使用的时候通过反序列化转化为内存对象。反序列化后的对象会重新分配内存,会破坏单例模式。首先看支持序列化的单例类的代码://实现Serializable即可实现序列化和反序列化publicclassSingletonimplementsSe......
  • 设计模式--单例模式
    设计模式是软件工程中共同的问题的解决方案,这些方案经过了验证和总结,能够在不同的情境中提供最佳的解决途径。设计模式主要分为三类:创建型模式、结构型模式和行为型模式。以下是这三类模式中的23个经典设计模式的列表:创建型模式(CreationalPatterns):创建型模式涉及对象的初始化和......