【JAVA学习之路 | 基础篇】单例设计模式

简介: 【JAVA学习之路 | 基础篇】单例设计模式

1.设计模式概述

  • 设计模式是在大量的实践中总结和理论化之后优选的代码,编程风格,以及解决问题的思考方式.设计模式免去我们自己再思考.
  • 经典的设计模式共有23种,每种设计模式均是特定环境下特定问题的处理方式.

2.何为单例模式

  • 所谓类的单例模式,就是采取一定的方法保证在整个软件系统中,对某个类只存在一个对象实例.并且该类只提供一个取得其对象实例的方法.

3.实现思路

  • 如果我们要让类在一个虚拟机中只产生一个对象,我们首先将类的构造器设置为private,这样就不能在类的外部通过new关键字创建对象(在该类外部无法通过构造器加载类的对象).但在类的内部仍然可以产生该类的对象.
  • 因为在类的外部无法创造类的对象,故只能调用类的某个静态方法返回类内部创建的对象("类.xx静态方法").静态方法只能访问类中的静态成员变量.所以返回实例的静态方法内的成员变量也均为静态的.

4.单例模式设计的两种思路

(1). 饿汉式 :

  • 特点 : "立即加载",随着类的加载而加载,当前的唯一实例已创建.
  • 优点 : 写法简单,由于内存中较早加载,使用更方便,更快,线程更安全.
  • 缺点 : 内存中占用时间较长.

(2). 懒汉式

  • 特点 : "延迟加载",在需要实例的时候才创建.
  • 优点 : 在需要的时候创建,更节省内存
  • 缺点 : 线程不安全.
public class Singleeton {
 
}
class HungryMan {
    //1.类的构造器的私有化
    private HungryMan() {
 
    }
    //2.在类的内部创造当前类的实例
    //4.且该hungryman属性也声明为static的
    private static HungryMan hungryman = new HungryMan();
    //3.通过geyInstance2的方法获取当前类的实例,必须声明为static
 
    public static HungryMan getInstance1() {
        return hungryman;
        //return HungryMan.hungryman;
    }
}
 
class LazyMan {
    //1.类的构造器的私有化
    private LazyMan() {
 
    }
    //2、。在类的内部创造当前类的实例
    //4.且该hungryman属性也声明为static的
    private static LazyMan lazyman = null;
    //3.通过geyInstance2的方法获取当前类的实例,如果未创建对象,则在方法内部创建对象
 
    public static LazyMan getInstance2() {
        if (lazyman == null) {
            lazyman = new LazyMan();
        }
        return lazyman;
        //return LazyMan.lazyman;
    }
}
相关文章
|
10天前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
30 10
|
11天前
|
设计模式 缓存 安全
「全网最细 + 实战源码案例」设计模式——单例设计模式
单例模式是一种创建型设计模式,确保一个类在整个程序运行期间只有一个实例,并提供一个全局访问点来获取该实例。它常用于控制共享资源的访问,如数据库连接、配置管理等。实现方式包括饿汉式(类加载时初始化)、懒汉式(延迟加载)、双重检查锁、静态内部类和枚举单例等。其中,枚举单例最简单且安全,能有效防止反射和序列化破坏。
28 7
|
13天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
43 4
|
13天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
24 4
|
13天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
39 1
|
4月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
120 43
Java学习十六—掌握注解:让编程更简单
|
3月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
3月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
52 2
|
3月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
51 4
|
3月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。