【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;
    }
}
相关文章
|
19天前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
|
1天前
|
设计模式 存储 安全
Java中的23种设计模式
Java中的23种设计模式
5 1
|
2天前
|
Java
JAVA高级部分学习小结(2023.11.4)
JAVA高级部分学习小结(2023.11.4)
|
8天前
|
算法 Java 测试技术
滚雪球学Java(54):从零开始学习Java中的Math类,轻松解决数学难题
【6月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
15 0
滚雪球学Java(54):从零开始学习Java中的Math类,轻松解决数学难题
|
8天前
|
Java
Java线程学习经典例子-读写者演示
Java线程学习经典例子-读写者演示
8 0
|
9天前
|
设计模式
单例设计模式
单例设计模式
10 1
|
15天前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的网络类课程思政学习系统附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的网络类课程思政学习系统附带文章和源代码设计说明文档ppt
14 0
|
16天前
|
设计模式 存储 前端开发
Java的mvc设计模式在web开发中应用
Java的mvc设计模式在web开发中应用
|
18天前
|
JavaScript Java 测试技术
基于JAVA语言的在线考试与学习交流网页平台附带文章和源代码设计说明文档ppt
基于JAVA语言的在线考试与学习交流网页平台附带文章和源代码设计说明文档ppt
19 1
|
19天前
|
设计模式 安全 Java
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)
该文介绍了一种C++的编程技巧——奇异递归模板模式(CRTP),旨在让派生组件能继承基本组件的特定功能。通过示例展示了如何创建一个`Fighter`接口和`MmaFighter`类,其中`MmaFighter`及其子类如`MmaBantamweightFighter`和`MmaHeavyweightFighter`强制类型安全,确保相同重量级的拳手之间才能进行比赛。这种设计避免了不同重量级拳手间的错误匹配,编译时会报错。CRTP适用于处理类型冲突、参数化类方法和限制方法只对相同类型实例生效的情况。
【设计模式】JAVA Design Patterns——Curiously Recurring Template Pattern(奇异递归模板模式)