【设计模式】-- 单例模式

单例模式Singleton

  • 应用场合:有些对象只需要一个就足够了,如古代的皇帝、老婆
  • 作用:保证整个应用程序中某个实例有且只有一个
  • 类型:饿汉式、懒汉式

下定义,什么是饿汉懒汉式?

  • 饿汉模式:只要类一加载,它就开始初始化,永远都是没有吃饱,所以叫饿汉式
  • 懒汉模式:当类加载的时候,比并没有初始化实例,而是在用户获取的时候才初始化,所以叫 懒汉式

区别

  • 饿汉模式,类的加载比较慢,但是运行获取对象的速度比较快,线程是安全的
  • 懒汉模式,类的加载比较快,但是运行获取对象的速度比较慢,线程不安全

饿汉式

//饿汉模式
public class EagerSingleton {
    
    //1、将构造方法私有化,不允许外部直接创建对象
    private EagerSingleton() {
        
    }
    
    //2、创建类的唯一实例,使用private static变成为类的静态成员
    private static EagerSingleton instance = new EagerSingleton();
    
    //3、提供一个获取实例的方法,使用public static修饰
    public static EagerSingleton getInstance(){
        
        return instance;
    }

}

懒汉式

//懒汉模式
public class LazySingleton {
    
    //1、将构造方法私有化,不允许外部直接创建对象
    private LazySingleton() {
        
    }
    
    //2、创建类的唯一实例,使用private static变成为类的静态成员
    private static LazySingleton instance;
    
    //3、提供一个获取实例的方法,使用public static修饰
    public static LazySingleton getInstance(){
        
        if(instance == null){
            instance = new LazySingleton();
        }
        
        return instance;
    }

}

测试

//测试
public class TestSingleton {
    
    public static void main(String[] args) {
        
        //饿汉式
        EagerSingleton s1 = EagerSingleton.getInstance();
        EagerSingleton s2 = EagerSingleton.getInstance();
        
        if (s1 == s2) {
            System.out.println("s1和s2是同一个实例");
        }else{
            System.out.println("s1和s2不是同一个实例");
        }
        
        //懒汉式
        LazySingleton s3 = LazySingleton.getInstance();
        LazySingleton s4 = LazySingleton.getInstance();
        
        if (s3 == s4) {
            System.out.println("s3和s4是同一个实例");
        }else{
            System.out.println("s3和s4不是同一个实例");
        }
    }

}

输出结果

s1和s2是同一个实例
s3和s4是同一个实例
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天笔试的时候被问到了单例模式,听了很多次,但是却没有认真看过,所以交了白卷,懒的教训啊!还有一题比较有趣的题目:...
    shakesbears阅读 378评论 0 3
  • Java设计模式——单例模式 单例模式应该是大家最为熟知的一种设计模式了,相信大家或多或少的都在自己的项目中使用过...
    gogoingmonkey阅读 526评论 0 2
  • 目录 本文的结构如下: 什么是单例模式 为什么要用该模式 模式的结构 代码示例 优点和缺点 适用环境 模式应用 总...
    w1992wishes阅读 402评论 1 2
  • 单例模式 介绍 为了节约系统资源,有时需要确保系统中某个类只有唯一一个实例,当这个唯一实例创建成功之后,我们无法再...
    666真666阅读 359评论 0 6
  • 概念 java中单例模式是一种常见的设计模式,单例模式的写法有好几种,比较常见的有:懒汉式单例、饿汉式单例。单例模...
    怡红快绿阅读 478评论 0 0