GOF23之单例模式(一)

简介: GOF23之单例模式(一)

GOF23之单例模式(一)

编程离不开它的设计思想,常见的设计模式有这23种:

20200401134307494.png

单例模式的核心作用:

保证一个类只有一个对象,并提供一个访问该实例的全局访问点。

优点:能减小占用内存,减少系统性能开销

20200401134307494.png

饿汉式实现(单例对象立即被加载)

/**
* @ClassName:
* @PackageName: com.test.testwebsocket.singleton
* @author: youjp
* @create: 2019-08-19 15:28
* @description:    测试单例模式- 饿汉式
* @Version: 1.0
*/
public class Singletondemo1 {
    //类初始化时,立即加载这个对象; 由于加载类时,天然的是线程安全的
    private static Singletondemo1 singletondemo1 =new Singletondemo1();
    private Singletondemo1() {
    }
    //方法没有同步,调用效率高
    public static Singletondemo1 getSingletondemo1(){
        return  singletondemo1;
    }
}

说明:饿汉式单例模式代码中,static修饰的变量在类加载时初始化,此时不会涉及多个线程对象访问该对象的问题。虚拟机保证只加载一次该类,肯定不会发生并发访问的问题。所以可以省略synchronized关键字。


问题: 如果只是加载本类,而不是要调用getSingletondemo1() ,甚至永远没有调用,则会造成资源浪费。

懒汉式实现(单例对象延迟加载)

/**
* @ClassName:
* @PackageName: com.test.testwebsocket.singleton
* @author: youjp
* @create: 2019-08-19 15:47
* @description:   单例模式- 懒汉式
* @Version: 1.0
*/
public class Singletondemo2 {
    private  static  Singletondemo2 s;
    private Singletondemo2() {  //私有化构造器
    }
    public static synchronized Singletondemo2 getS(){
        if (s ==null){
            s= new Singletondemo2();
        }
        return s;
    }
}

说明:如它名字一样 lazy。 懒汉式的特点是懒加载,延迟加载。在需要使用的情况下,才会去加载

问题:资源利用率高,但是每次调用getS()都需要同步,并发效率低。

相关文章
|
5月前
|
设计模式 缓存 安全
【Java设计模式 - 创建型模式1】单例模式
【Java设计模式 - 创建型模式1】单例模式
21 0
|
6月前
|
设计模式 Java
Java设计模式【一】:单例模式
Java设计模式【一】:单例模式
46 0
|
6月前
|
设计模式 安全 Java
Java设计模式之单例模式
在软件工程中,单例模式是一种常用的设计模式,其核心目标是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。Java作为一门广泛使用的编程语言,实现单例模式是面试和实际开发中的常见需求。
91 9
Java设计模式之单例模式
|
设计模式 SpringCloudAlibaba 安全
Java设计模式(二):单例模式
**单例设计模式**(Singleton Design Pattern)理解起来非常简单。一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式
129 0
|
6月前
|
安全 C++
创建型 单例模式
创建型 单例模式
40 1
|
设计模式 缓存 安全
单例模式【Java设计模式】
单例模式【Java设计模式】
51 0
|
设计模式 Java Windows
Java设计模式 —— 单例模式
Java设计模式 —— 单例模式
|
设计模式 安全 Java
Java设计模式_单例模式
Java设计模式_单例模式
|
设计模式 安全 Java
Java设计模式—单例模式
Java设计模式—单例模式
77 0
|
设计模式 存储 安全
<Java设计模式>(三)单例模式
<Java设计模式>(三)单例模式
<Java设计模式>(三)单例模式