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;}*/}


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

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


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

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

相关文章
|
25天前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
1月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
38 4
|
2月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
54 0
[Java]23种设计模式
|
1月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
2月前
|
设计模式 Java
Java设计模式
Java设计模式
37 0
|
Java 开发工具 git
Java开发初级6.24.3
5.在Git使用过程中,进行Git配置的操作命令是哪个() A. config B. config -g C. config -a D. git config 相关知识点: 在git中,经常使用git config 命令用来配置git的配置文件,git配置级别主要有:仓库级别 local 【优先级最高】、用户级别 global【优先级次之】、系统级别 system【优先级最低】 正确答案:D 10.RDBMS是什么? A. Rela Database Management Systems B. Relational Database Management Systems C. Relation
141 0
|
SQL 前端开发 JavaScript
Java开发初级6.24.2
3.Java网站src/main/java目录保存的是什么资源? A. Java源代码文件 B. 测试代码 C. JavaScript、CSS等文件 D. 图片资源 正确答案:A 4.什么是索引Index? A. SQL数据库里的表管理工具 B. SQL数据库里的查询工具 C. SQL数据库里的目录工具 D. SQL数据库用来加速数据查询的特殊的数据结构 正确答案:D
150 0
|
Java
Java开发初级6.24.1
1.下面关于泛型的描述中错误的一项是? A. “? extends 类”表示设置泛型上限 B. “? super 类”表示设置泛型下限 C. 利用“?”通配符可以接收全部的泛型类型实例,但却不可修改泛型属性内容 D. 如果类在定义时使用了泛型,则在实例化类对象时需要设置相应的泛型类型,否则程序将无法编译通过 相关知识点: https://edu.aliyun.com/course/35 正确答案:D 2.下列选项中属于SVN中控制鉴权用户访问版本库的权限默认权限的是() A. write B. read C. none D. null 相关知识点: auth-access:取值范围为"writ
245 0
|
Java 开发工具 git
Java开发初级6.23.3
5.在Git使用过程中,进行Git配置的操作命令是哪个() A. config B. config -g C. config -a D. git config 相关知识点: 在git中,经常使用git config 命令用来配置git的配置文件,git配置级别主要有:仓库级别 local 【优先级最高】、用户级别 global【优先级次之】、系统级别 system【优先级最低】 正确答案:D 10.RDBMS是什么? A. Rela Database Management Systems B. Relational Database Management Systems C. Relation
132 0
|
SQL 前端开发 JavaScript
Java开发初级6.23.2
3.Java网站src/main/java目录保存的是什么资源? A. Java源代码文件 B. 测试代码 C. JavaScript、CSS等文件 D. 图片资源 正确答案:A 4.什么是索引Index? A. SQL数据库里的表管理工具 B. SQL数据库里的查询工具 C. SQL数据库里的目录工具 D. SQL数据库用来加速数据查询的特殊的数据结构 正确答案:D
221 0