Software entities should be open for extension,but closed for modification——Bertrand Meyer
如果把编程比作战争,那么设计模式就是36计。
首先,让我来介绍一下设计模式中最简单的一种——单例模式
什么叫单例模式呢?
一山难容二虎,古代皇帝只有一个;现代社会女人不好惹,老婆只能有一个。
在计算机的世界里,有一些东西也是比较霸道的,比如说配置文件,线程池,缓存,日志文件等等。有了两个配置文件,就要考虑到一致性问题,没事儿找事儿干;有两个缓存,浪费资源还要考虑同步问题,费力不讨好。
单例模式的目的就是使得单例类的一个对象成为系统中该类的唯一实例。
在明白了什么是单例以及单例模式的用处之后,我们要怎么实现单例模式呢?
实现单例模式有两种方法:懒汉模式和饿汉模式
首先我来介绍一下饿汉模式
创建一个Singleton类来实现单例,保证整个应用程序中这个类的实例有且只有一个
package com.elf.SimpleMode; /* * 单例模式Singleton * 应用场合:有些对象只需要一个就足够 * 作用:保证整个应用程序中某个实例有且只有一个 * 类型:饿汉模式、懒汉模式 */ public class Singleton { }
当我们要使用这个类的时候,就需要实例化一个这个类的对象,那么我新建一个主类Test.java
package com.elf.SimpleMode; public class Test { new Singleton(); new Singleton(); }
我们可以通过构造方法实例化多个该类的实例,要想实现工程中有且只有该类的一个实例,那么我们要从该类的构造方法入手。
1.将构造方法改为私有方法,那么在外部就不能直接使用构造方法创建实例了,哎呀!这不整坏了嘛!
别急啊,现在想想唯一能创建该类的实例的是谁呢?对,该类本身~~
2.创建一个该类的唯一实例
package com.elf.SimpleMode;
/*
* 单例模式Singleton
* 应用场合:有些对象只需要一个就足够了,如古代皇帝、老婆
* 作用:保证整个应用程序中某个实例有且只有一个
* 类型:饿汉模式、懒汉模式
*/
public class Singleton {
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton(){
}
//2.创建类的唯一实例
Singleton instance=new Singleton();
}
可是没法实例化该类的对象,还是没法得到这个实例啊!你逗我~~
别急,那不是有一种不用实例化对象也可以调用的属性吗?
对,聪明的你一下就猜中了,就是static属性
package com.elf.SimpleMode;
/*
* 单例模式Singleton
* 应用场合:有些对象只需要一个就足够了,如古代皇帝、老婆
* 作用:保证整个应用程序中某个实例有且只有一个
* 类型:饿汉模式、懒汉模式
*/
public class Singleton {
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton(){
}
//2.创建类的唯一实例,使用static修饰
static Singleton instance=new Singleton();
}
变成了这样之后,那么外部也就可以得到这个类的实例了
package com.elf.SimpleMode; public class Test { public static void main(String[] args) { //饿汉模式 Singleton s1=Singleton.instance(); Singleton s2=Singleton.instance(); if(s1==s2){ System.out.println("s1和s2是同一个实例"); }else{ System.out.println("s1和s2不是同一个实例"); } } }
得到的结果是:
s1和s2是同一个实例
也就是说,无论这里实例化多少个对象,其实都是同一个,这不就实现了嘛!
为了控制访问,为了安全,我们可以这个属性改为私有属性,然后添加一个get方法
package com.elf.SimpleMode; /* * 单例模式Singleton * 应用场合:有些对象只需要一个就足够了,如古代皇帝、老婆 * 作用:保证整个应用程序中某个实例有且只有一个 * 类型:饿汉模式、懒汉模式 */ public class Singleton { //1.将构造方法私有化,不允许外部直接创建对象 private Singleton(){ } //2.创建类的唯一实例,使用private static修饰 private static Singleton instance=new Singleton(); //3.提供一个用于获取实例的方法,使用public static修饰 public static Singleton getInstance(){ return instance; } }
那么现在呢!这个Singleton类也就完美了。
Test.java
package com.elf.SimpleMode; public class Test { public static void main(String[] args) { //饿汉模式 Singleton s1=Singleton.getInstance(); Singleton s2=Singleton.getInstance(); if(s1==s2){ System.out.println("s1和s2是同一个实例"); }else{ System.out.println("s1和s2不是同一个实例"); } } }
同样得到:
s1和s2是同一个实例
~~~这就是单例模式中的懒汉模式实现方法~~~
想知道懒汉模式怎么实现吗?
想知道懒汉模式与饿汉模式的区别吗?
********************请点击下一篇,精彩仍在继续***************************
相关推荐
**设计模式——单例模式** 在软件工程中,设计模式是一种在特定场景下解决常见问题的标准方案,可以被复用并提升代码质量。单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式...
单例模式是软件设计模式中的一种经典模式,它保证了类在任何情况下都只有一个实例存在。这个模式在很多场景下非常有用,例如控制全局资源、管理配置信息等。本文将详细探讨单例模式的懒汉式实现,并结合源码进行解析...
单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制共享资源、管理系统级别的服务或者简化对象间的交互。单例模式的核心在于...
单例模式是软件设计模式中的一种经典模式,其主要目的是控制类的实例化过程,确保在任何情况下,一个类只有一个实例存在。这种模式通常用于管理共享资源或者全局配置,例如数据库连接池、线程池、日志服务等。在Java...
【Java设计模式——单例模式】 单例模式是一种常见的软件设计模式,它的核心思想是确保在应用程序的整个生命周期中,某个类只有一个实例存在。这种模式主要用于控制类的实例化过程,减少系统资源的消耗,提高系统...
策略模式和单例模式是软件设计中两种非常重要的设计模式,它们在实际开发中有着广泛的应用。在这篇文章中,我们将深入探讨这两种模式的核心概念、实现方式以及如何在实际项目中运用。 策略模式是一种行为设计模式,...
本次我们将深入探讨两种设计模式——单例模式和装饰模式,它们在Java编程中都有着广泛的应用。 首先,让我们来理解“单例模式”。单例模式是一种创建型设计模式,其核心思想是保证一个类只有一个实例,并提供一个...
文章目录什么是单例模式?单例模式的实现饿汉式懒汉式线程安全的懒汉式登记式单例模式的优缺点单例...单例设计模式通用类图如下: 7-1:单例设计模式通用类图 Sngleton类称为单例类,通过使用private的构造函数确保
**设计模式——单例模式** 单例模式是一种广泛应用于软件设计中的创建型设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于控制共享资源的访问,比如线程安全的数据库连接池...
饿汉式单例:类加载时就进行了实例化 懒汉式单例:第一次使用时才进行实例化。 应用:单例模式应用的非常广泛。我们经常遇到这样的场景,线程A和线程B对同一个对象执行操作,但是在A里面new了后,B里面不便取,使的A...
### Java设计模式——单例模式详解 #### 一、单例模式概述 单例模式是设计模式中的一个重要组成部分,属于创建型模式之一。其主要作用是确保某个类仅有一个实例存在,并提供一个全局访问该实例的方法。这在很多场景...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。刘伟先生在讲解设计模式时,通常会深入浅出地介绍这些模式的原理、应用场景以及如何有效地在实际编程中应用它们。设计模式并不是...
在本文中,我们将深入探讨三种工厂设计模式——简单工厂模式、抽象工厂模式和工厂方法模式,以及两种单例模式——饿汉单例模式和懒汉单例模式。这些模式都是面向对象设计中的重要组成部分,对于理解和构建可维护、可...
单实例模式是软件设计模式中的一种,它的核心思想是确保一个类在整个系统运行过程中只有一个实例存在,并提供一个全局访问点,以保证所有对该类对象的访问都指向这个唯一的实例。这种模式在Java中广泛应用于配置管理...
单例模式大家并不陌生,也都知道它分为什么懒汉式、饿汉式之类的。但是你对单例模式的理解足够透彻吗?今天我带大家一起来看看我眼中的单例,可能会跟你的认识有所不同。很容易看出,上面这段代码在多线程的情况下是...
在软件设计模式中,工厂模式和单例模式是两种非常基础且重要的模式,它们都是用于解决对象创建问题,但有着不同的设计理念和应用场景。本篇文章将深入探讨这两种模式,并结合具体的代码示例`myFactoryDemo`进行讲解...
在编程世界中,Java设计模式是面向对象编程领域的一个重要概念,它为解决常见的软件设计问题提供了可重用的解决方案。对于新手来说,设计模式可能显得深奥难懂,但它们实际上是经验丰富的开发者用来提高代码质量、可...
设计模式之——单例模式单例的几种实现1. 懒汉单例模式2. synchronized 修饰的懒汉单例模式3. 双重检查锁定的单例模式4. 静态内部类实现单例模式5. 饿汉实现单例模式6. 饿汉变种实现单例模式7. 枚举实现单例模式...
**Java设计模式——单例模式推理过程** 设计模式是软件开发中的一种最佳实践,它封装了前辈们在解决常见问题时积累的经验。这些模式被广泛使用、被大家所熟知,并且已经进行了系统的分类。设计模式的目标是提高代码...