【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;
    }
}
相关文章
|
3月前
|
设计模式 Java Spring
Java 设计模式之责任链模式:优雅处理请求的艺术
责任链模式通过构建处理者链,使请求沿链传递直至被处理,实现发送者与接收者的解耦。适用于审批流程、日志处理等多级处理场景,提升系统灵活性与可扩展性。
354 2
|
3月前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
241 1
|
3月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
367 0
|
3月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
334 0
|
4月前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
168 1
|
3月前
|
设计模式 算法 搜索推荐
Java 设计模式之策略模式:灵活切换算法的艺术
策略模式通过封装不同算法并实现灵活切换,将算法与使用解耦。以支付为例,微信、支付宝等支付方式作为独立策略,购物车根据选择调用对应支付逻辑,提升代码可维护性与扩展性,避免冗长条件判断,符合开闭原则。
432 35
|
3月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
338 8
|
3月前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
348 7
|
4月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
88 5
|
4月前
|
Java 程序员
Java基础学习day08
本节讲解Java中的代码块(静态与实例)及其作用,深入介绍内部类(成员、静态、局部及匿名)的定义与使用,并引入函数式编程思想,重点阐述Lambda表达式及其在简化匿名内部类中的应用。
162 5