Java课堂|独一无二的事物(设计模式之单例模式)

这篇具有很好参考价值的文章主要介绍了Java课堂|独一无二的事物(设计模式之单例模式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文主要讲述单例模式,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。

一. 什么是单例模式

单例模式是23种设计模式中创建型模式的一种,通过单例模式的方法创建的类在当前进程或者线程中只有一个实例。单例模式有两种比较常见的实现方式:饿汉式懒汉式

二. 生活中的单例模式

1. 父母

古语有云:身体发肤,受之父母。咱们每个人包括江帅自己也是,都是父母的爱情结晶。亲生的父母永远只会有一对,而你未来的孩子也是一样,也只有一对亲生父母,这就跟单例模式很相似。
Java课堂|独一无二的事物(设计模式之单例模式)

2. 婚姻

每个人都渴望拥有能够完美的爱情,与相爱之人步入婚姻的殿堂,携手共度余生。而单例模式就像咱们的生活中的婚姻一样,不管你是否有过婚姻,还是有过多少段婚姻,你的合法妻子最多只会有一个,不可能有多个。婚姻中的伴侣就跟单例模式很相似。

Java课堂|独一无二的事物(设计模式之单例模式)

3. 人生

每个人的人生都是不相同的,没有两个一样的独立个体,毕竟每个人的生活经历、成长环境、性格等等都是不一样的,所以造就了独一无二的你。而你就是单例模式最好的表现。

Java课堂|独一无二的事物(设计模式之单例模式)

三. 单例模式的实现

接下来咱们就来讲下最基础的两种单例模式实现方式:饿汉式、懒汉式。

1. 饿汉式

接下来江帅以婚姻中的夫妻对象来举例,使用饿汉式来实现。首先来创建一个饿汉式类和客户端。

package com.qianfeng.ran

/*
 * @author:江帅
 *	
 *  由饿汉式创建的类:老婆类
 */
public class Wife{
	//创建一个自身实例对象的私有化静态属性
    private static Wife wife = new Wife();

    //创建私有化无参构造方法
    private Wife(){
    }
    //创建一个供外界获取当前实例对象的公开静态方法
    public static Wife getInstance(){
        return wife;
    }
}

class Demo{
    public static void main(String[] args) {
        Wife wife1 = Wife.getInstance();
        Wife wife2 = Wife.getInstance();
        //执行结果:
        //true
        System.out.println(wife1 == wife2);
    }
}

从上面案例可以看出,构造方法被私有化后,我们只能通过它提供的方法 getInstance() 来获取当前类的实例对象,而我们每次获取的对象都会是同一个,所以 Wife 是个单例模式的类。

而从 Wife 类中我们能看得到它有个静态的私有属性,这个私有属性就是当前类的实例对象。也就是说不管我们还没有调用这个类,类中的静态对象属性在加载进内存中的时候已经存在了,这个就是饿汉式的特点。

饿汉式就婚姻里的对象一样,他(她)一早就出现在这个世上,只是需要你们彼此寻找到对方而已。

2. 懒汉式

接下来江帅再以孩子为例,用懒汉式实现。创建一个懒汉式类和客户端。

package com.qianfeng.ran

/*
 * @author:江帅
 *	
 *  由懒汉式创建的类:孩子类
 */
public class Child{
	//创建一个类型为当前类的私有化静态属性
    private static Child child;

    //创建私有化无参构造方法
    private Child(){
    }
    //创建一个供外界获取当前实例对象的公开静态方法
    public static Child getInstance(){
        //判断静态属性是否为 null
        if(child == null){
            //如果为 null 则创建当前类对象并赋值给静态属性
            child = new Child();
        }
        return child;
    }
}

class Demo{
    public static void main(String[] args) {
        Child child1 = Child.getInstance();
        Child child2 = Child.getInstance();
        //执行结果:
        //true
        System.out.println(child1 == child2);
    }
}

这个案例也是一样构造方法被私有化,只能通过其提供的静态方法获取其实例对象。

在 Child 类中它也有个静态的私有属性,但是这个静态属性并没有赋值,只有在第一次调用 Child 类获取实例方法 getInstance() 的时候,才会创建当前类的实例对象并赋值给其属性并返回。因此在没有调用其方法之前,对象是没有创建的,只有等到需要的时候才会被创建,这就是懒汉式。

懒汉式就孩子一样,他们并不会一开始就存在,只有当你创造他的时候才会存在,而你与你的对象创建出来每一胎的孩子都会是独一无二的,即使你多生几个,每一个都是唯一的。

四. 配套

如果你不习惯阅读技术文章,或是对文中的技术概念不能很好地理解,可以来看看帮你筛选出的视频教程。与本文配套的Java学习视频,戳我直达:

五. 总结

单例模式就像生活中独一无二的事物一样,只不过有些早已存在,而有些需要你去创建。在程序中很多场景都会运用到单例模式,它能减少我们需要的对象,降低服务器的压力,提高运行效率。

不过单例模式的两种模式中,懒汉式可能会出现线程安全问题。就像一胎生2个孩子,这样每一胎就是独立的一个对象了。文章来源地址https://www.toymoban.com/news/detail-468517.html


到了这里,关于Java课堂|独一无二的事物(设计模式之单例模式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从18个形状、5个颜色、是否旋转3个维度设计一个独一无二的游戏数据

    规则说明: 只有一个图块只出现一次,其他图块至少出现2次; 需要控制出现的颜色、形状、旋转来控制难度 首先定义好所有的形状和颜色 根据配置的形状数量和颜色数量,组成一个图形合集A(静止的图形) 根据配置的旋转方向和最大旋转种类数,跟图形合集合并成一个完整

    2024年02月11日
    浏览(44)
  • 【Python】Python高校图书馆书籍管理系统(登录、注册、功能源码设计)【独一无二】

    👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术 本文是基于PyQT5开发的一款Python高校图书馆书籍管理系统,源码可以关注公众号,后台回复: 高校图书馆管理系统 获

    2024年02月08日
    浏览(29)
  • java8新特性之toMap的用法——全网独一无二的通俗易懂的讲解

    对于java8的新特性toMap方法,相信有很多人都在工作中用过,接下来就通俗易懂的讲解一下toMap吧 先来看看官网对于toMap方法的解释 toMap有个三个重载的方法,每一个重载方法的详解分别如下 (1)方法1:两个参数 public static T, K, U Collector T, ?, MapK,U toMap(Function? super T, ? extends

    2024年02月08日
    浏览(45)
  • leetcode 1207. 独一无二的出现次数

    题目描述 解题思路 执行结果 leetcode 1207. 独一无二的出现次数. 题目描述 独一无二的出现次数 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。 示例 1: 输入:arr = [1,2,2,1,1,3] 输出:true 解释

    2024年02月11日
    浏览(27)
  • 篇一:单例模式:C++中的独一无二

    篇一: “单例模式:C++中的独一无二” 设计模式在软件开发中起到了至关重要的作用,其中单例模式是最为常用且基础的设计模式之一。单例模式确保一个类只有一个实例,并提供全局访问点,以保证系统中的某个对象只有唯一的存在。在C++中,单例模式经常被用于管理资

    2024年02月13日
    浏览(37)
  • 【Python】Python仓储管理系统(源码)【独一无二】

    👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 使用面相对象设计方法设计一个仓储管理

    2024年02月05日
    浏览(59)
  • (数组) 1207. 独一无二的出现次数 ——【Leetcode每日一题】

    难度:简单 给你一个整数数组 arr ,请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的,就返回 true ;否则返回 false 。 示例 1: 输入:arr = [1,2,2,1,1,3] 输出:true 解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出

    2024年02月08日
    浏览(28)
  • UUID算法:独一无二的标识符解决方案

    在分布式系统和大数据环境下,唯一标识符的生成和管理是一项关键任务。UUID(Universally Unique Identifier)算法应运而生,成为了解决重复数据和标识符冲突的有效工具。本文将探讨UUID算法的优势和劣势,分析其在分布式系统、大数据环境以及其他领域中的应用,同时给出Py

    2024年02月19日
    浏览(34)
  • 【python】python小游戏——开心消消乐(源码)【独一无二】

    👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 基于 Pygame 的游戏程序,它实现了一个类

    2024年04月11日
    浏览(29)
  • 【python】python旅游网数据抓取分析(源码+论文)【独一无二】

    👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 每个爬虫针对特定的目标网站(去哪儿网

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包