6

JAVA-设计模式-1-单例模式的理解与使用

 3 years ago
source link: https://blogs.chaobei.xyz/2021/07/26/JAVA-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-1-%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F%E7%9A%84%E7%90%86%E8%A7%A3%E4%B8%8E%E4%BD%BF%E7%94%A8/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
JAVA-设计模式-1-单例模式的理解与使用 | 三味书屋
JAVA-设计模式-1-单例模式的理解与使用
程序猿小码 Architect

 2021-07-26 15:45:25    

 1.3k 字  4 分钟  1

数据结构我们已经学了一部分了。是该了解了解设计模式了。习惯了CRUD的你,也该了解了解这一门神器、我为啥要说是神器呢?

因为在大厂的面试环节、以及很多的比如

  • Springboot
  • Mybatis

等开源框架中、大量的使用到了设计模式。为了我们在之后学习源代码的时候不再懵逼,为啥这代码能这样写?为啥巴拉巴拉xxx

设计模式必须要肝完

设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结
它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。

总结下来说就是:一种设计经验、一种设计套路

想一下,被前辈们总结下来的东西。使用这么多年、凝结为精华的东西、该学

我们首先来了解一下什么是创建型,创建型 作为设计模式的一种分类,是描述如何将一个对象创建出来的。

我们都知道,JAVA 作为一种面向对象编程,最关键的关键字new 用来实例化一个对象。创建型分类、则是描述:如何更好的创建出一个对象

单例模式理解

单例模式,从字面意思上了解就是:它只负责创建出一个对象。因此被称为单例模式。理解一下:我们的计算机都会有一个任务管理器。而在一台windows 的电脑上。任何时候都只会实例化一个任务管理器对象。进而可以理解为单例模式

image.png

在一个任务管理器被调用的时候(对象已经被创建),再次使用ctrl+shift+esc 则任然返回这个已经被创建的任务管理器

UML 图理解

可能我首次提到这个概念,所以简介一下。

UML图是用图形化的方式表示软件类与类之间的关系。用图形化的方式,展示出众多类之间的关联关系。

如下图,我用图形的方式、描述了一个任务管理器类JobManagement.class
它有一个 私有化private的属性management 类型为本身。
它有一个 公开的public 的方法getManagement() 返回类型为本身

image.png

  • 常用的类型修饰符就是 + 与 -

注意:“可见性”表示该属性对类外的元素是否可见,包括公有(Public)、私有(Private)、受保护(Protected)和朋友(Friendly)4 种,在类图中分别用符号+、-、#、~表示。
http://c.biancheng.net/view/1319.html

关联关系就是用来表示:多个类之间存在怎么样的关系的表示方法。常用箭头来表示。
image.png

虚线箭头 依赖关系

虚线箭头用来表示依赖关系 从使用类指向被依赖的类。这里使用的类就是我们的main 方法。而被依赖类则是我们的任务管理器对象

菱形箭头 聚合关系

聚合管理作为一种强关联管理。一般用于成员变量的引用。

http://c.biancheng.net/view/1319.html

单例模式的特点

  • 对象只会被创建一次,并且重复使用
  • 全局提供一个访问点。静态访问点
  • 构造方法私有
public class JobManagement {

private static volatile JobManagement management;

private JobManagement() {

}

public static synchronized JobManagement getManagement() {

if (null == management) {
System.out.println("未创建任务管理器,正在创建。。");
management = new JobManagement();
} else {
System.out.println("已经存在创建的任务管理器");
}
return management;
}
}

任务管理器对象包含以及静态类型的自身对象引用。以及将自身的构造方法进行私有化、使得外部无法直接创建对象。而需要这个对象,则需要调用get()方法进行获取。

  • volatile 关键字将属性在所有线程中同步
if (null == management) {
System.out.println("未创建任务管理器,正在创建。。");
management = new JobManagement();
}

懒汉模式则是在对象首次被访问的时候才进行创建的。否则、若这个对象从未被引用、则对象是不会被创建的。而饿汉模式,刚刚相反。

private static JobManagement management = new JobManagement();

饿汉模式则是则是在类被虚拟机加载的时候就创建一个示例出来。这样在访问之前就已经有对象被创建、线程也是安全的。

    public static void main(String[] args) {

JobManagement management1 = JobManagement.getManagement();
System.out.println(management1);
JobManagement management2 = JobManagement.getManagement();
System.out.println(management2);

}
----------------------------
未创建任务管理器,正在创建。。
JobManagement@1b6d3586
已经存在创建的任务管理器
JobManagement@1b6d3586

单例模式在Java 的学习中还是有很多地方会使用到,对于我们学习的第一个,也是最简单的模式,也是最常用的模式。记住它的特点:

  • 构造方法私有
  • 提供一个全局访问点

http://c.biancheng.net/view/1338.html

banner


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK