zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [结题报告]10235 Simply Emirp Time limit: 3.000 seconds
    [杭电ACM]1720A+B Coming
    [结题报告]10041 Vito's Family Time limit: 3.000 seconds
    mysqlvarchar、text 类型到底能存储多大字符?
    mysql项目更换数据源为oralce后项目调整
    Oracle创建定时任务执行函数
    IOS手机访问网页window.location.href跳转新页面第一次可以第二次报错失效
    logrotate日志分割
    查找一批设备的在线情况
    pkill 用法例子
  • 原文地址:https://www.cnblogs.com/ChromeT/p/13160570.html
Copyright © 2011-2022 走看看