Java开发——41.设计模式_单例(Singleton)模式

简介: 设计模式_单例(Singleton)模式

什么是设计模式?

大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。(设计模式就是像是取最优的模板一样,类似英文作文模板。)


学习设计模式的目的:

使得开发项目更加容易扩展和维护,解决方式就是一个“分工”;在不改变原有代码的基础上实现扩展操作。


现阶段学习的设计模式仅做了解的设计模式:

单例模式(Singleton)是需要掌握的!!!

模板方法设计模式(TemplateMethod)/代理模式(Proxy)有些相像,学习的时候注意区分;

工厂模式,又分为了三大类,所以区别学习,注意抽象工模式涉及反射的内容,后续再补充...

image.png


单例模式(Singleton):

采用一定的方法保证在整个软件系统中对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法


拆解主要内容:


对某个类只能存在一个对象实例->private类名(){} ->私有化构造器该类只提供一个取得其对象实例的方法->提供一个可以返回该对象的方法1.创建类2.私有化类的构造器3.创建一个类对象并将类封装起来4.创建一个能返回该类对象的方法5.必须保证该方法能通过类名获取到->声明为static方法->推断得第四步为static修饰的对象


饿汉式:

天然的线程安全,所以如下写法就是最标准的形式。


publicclassDemoSingleton {
publicstaticvoidmain(String[] args) {
Bank.getInstance();
    }
}
//1.创建类classBank{
//2.私有化构造器privateBank(){
    }
//3.创建一个类对象并将类封装起来//5.因为静态方法只能使用静态的变量,所以该实例化对象也必须声明为static的privatestaticBankinstance=newBank();
//4.创建一个能返回该类对象的方法//我们需要这个方法返回该类的实例化对象,需要声明该方法为static,可以通过类名调用publicstaticBankgetInstance(){
returninstance;
    }
}


饿汉式的好处:线程安全的;

饿汉式的缺点:对象的加载时间长,可能在调用getInstance()的时候才需要创建对象,但是在调用getInstance()前对象就是已存在。


懒汉式:

下面这种写法是存在安全隐患的,最为安全需要加上线程同步(synchronized)!


publicclassDemoSingleton {
publicstaticvoidmain(String[] args) {
Bank.getInstance();
    }
}
//1.创建类classBank{
//2.私有化构造器privateBank(){
    }
//3.创建一个类对象并将类封装起来//5.因为静态方法只能使用静态的变量,所以该实例化对象也必须声明为static的privatestaticBankinstance=null;
//4.创建一个能返回该类对象的方法//我们需要这个方法返回该类的实例化对象,需要声明该方法为static,可以通过类名调用publicstaticsynchronizedBankgetInstance(){//此时同步监视器就是Bank.classif (instance==null) {
instance=newBank();
        }
returninstance;
/*public static  Bank getInstance(){//这种效率会相对高一点,因为如果instance != null后,后续的线程就可以直接拿到对象,不用在抢占锁了if (instance == null) {synchronized (Bank.class) {if (instance == null) {instance = new Bank();}}}return instance;}*/}


懒汉式的好处:延迟对象的创建;

懒汉式的局限:天然的线程不安全,需要后续进行线程同步。


饿汉式和懒汉式在面试的时候可能会让手写代码所以建议掌握!!!

另外,饿汉式是天然线程安全的,所以不用额外担心安全隐患的问题;但是在书写懒汉式要保证线程安全!!!

目录
打赏
0
0
0
0
14
分享
相关文章
「全网最细 + 实战源码案例」设计模式——单例设计模式
单例模式是一种创建型设计模式,确保一个类在整个程序运行期间只有一个实例,并提供一个全局访问点来获取该实例。它常用于控制共享资源的访问,如数据库连接、配置管理等。实现方式包括饿汉式(类加载时初始化)、懒汉式(延迟加载)、双重检查锁、静态内部类和枚举单例等。其中,枚举单例最简单且安全,能有效防止反射和序列化破坏。
38 7
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
59 2
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
58 4
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
95 0
[Java]23种设计模式
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
120 0
Java设计模式
Java设计模式
59 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等