JAVA设计模式 1【创建型】单例模式的理解与使用

JAVA设计模式 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

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×