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

  • 相关阅读:
    在 Windows 上测试 Redis Cluster的集群填坑笔记
    vmware安装黑苹果教程
    微信支付v3发布到iis时的证书问题
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(安装篇SQL Server on linux)
    Linux下安装SQL Server 2016(准备篇SQL Server on linux)
    客服端与服务端APP支付宝支付接口联调的那些坑
    ASP.NET MVC]WebAPI应用支持HTTPS的经验总结
    .net平台下C#socket通信(中)
  • 原文地址:https://www.cnblogs.com/ChromeT/p/13160570.html
Copyright © 2011-2022 走看看