Java设计模式 _创建型模式_单例模式(懒汉式,饿汉式)

一、单例模式

1、单例模式(Singleton Pattern)是一种创建对象的设计模式。一个类负责创建自己的对象,同时确保只有1个对象被创建,这个类提供了一种访问其唯一的对象的方式,不需要在实例化该类的对象。从而保证了这个类在全局仅有一个实例,避免这个类频繁地创建与销毁。

2、实现思路:

(1)、该类中定义该类的实例属性,私有化。

(2)、该类定义构造方法也私有化。

(3)、提供public的方法获取实例对象(如果有实例直接返回,没有实例,创建实例后在返回)

二、代码示例

1、懒汉式 (不推荐)

特点:先不创建该类的实例,在获取实例的方法中,根据判断,如果不存在才生成和返回。

存在问题:懒汉式在多线程并发时,存在线程安全隐患,线程不安全。(后者运行的new方法,可能会覆盖掉前者运行new的赋值)

代码示例:

java 复制代码
public class Rose {
    // 私有化本例对象,不初始化
    private static Rose rose;
    // 私有化构造方法
    private Rose() {}
    // 公有化获取方法
    public static Rose getInstance() {
        if (rose == null) {
            rose = new Rose();
        }
        return rose;
    }

    public static void main(String[] args) {
        Rose r = Rose.getInstance();
        Rose r1 = Rose.getInstance();
        System.out.println(r==r1);     // 结果返回true,可以看到两个实例实际上是一个对象
    }
}

2、饿汉式(推荐)

特点:在加载这个类的时候就创建了这个类的实例,在获取的方法中直接返回。

存在问题:会在类装载的时候就占用一定的内存空间,如果该类的方法没有用到,就造成一定的内存浪费。不过相对现如今的服务器而言,一点点的内存影响并不是很大,相对懒汉式而言,这种方式多线程下也安全,推荐用此例。

代码示例:

java 复制代码
public class Peony {
    // 私有化本例对象,不初始化
    private static Peony peony = new Peony();
    // 私有化构造方法
    private Peony() {}
    // 公有化获取方法
    public static Peony getInstance() {
        return peony;
    }

    public static void main(String[] args) {
        Peony r = Peony.getInstance();
        Peony r1 = Peony.getInstance();
        System.out.println(r==r1);    // 结果返回true,可以看出两个实例实际上是一个对象
    }
}

学海无涯苦作舟!!!

相关推荐
云徒川1 小时前
【设计模式】原型模式
java·设计模式·原型模式
卡戎-caryon7 小时前
【Linux网络与网络编程】03.UDP Socket编程
linux·服务器·网络·笔记·单例模式·udp·网络通信
huang_xiaoen7 小时前
java设计模式之桥接模式(重生之我在地府当孟婆)
设计模式·桥接模式
HappyGame028 小时前
设计模式-观察者模式
观察者模式·设计模式
渊渟岳8 小时前
掌握设计模式--解释器模式
设计模式
牵牛老人19 小时前
C++设计模式-责任链模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
c++·设计模式·责任链模式
肥仔哥哥193019 小时前
设计模式分类与定义(高软55)
设计模式·软考·高软·设计模式分类
菲fay20 小时前
Unity 单例模式写法
unity·单例模式
云徒川1 天前
【设计模式】过滤器模式
windows·python·设计模式
并不会1 天前
多线程案例-单例模式
java·学习·单例模式·单线程·多线程·重要知识