JAVA中23种设计模式之单例模式

简介: 1. 最简单的单例模式什么叫单例模式:口语表达就是——一个类有且仅有一个对象,外部无法实例化它的新对象。

1. 最简单的单例模式

  1. 什么叫单例模式:口语表达就是——一个类有且仅有一个对象,外部无法实例化它的新对象。只能通过调用的getXXX()方法来实例化对象,这个方法是自定义的。
  2. 最简单的单例模式例子

2. 例如

创建一个类,将这类变成单例模式的

package demo;
//自定义的类默认情况,是非单例的
public class MyService {

    //单例模式中,使用静态的当前类的对象,来作为它的属性
    //静态属性
    private static MyService myservice;

    private MyService(){

    }

    /**
     * 自定义添加的静态方法,用来构造单例模式
     * 不允许直接通过new一个对象来创建这个类的实例
     * @return
     */
    public static MyService getMyServiceInstance(){

        if(myservice==null){

            myservice = new MyService();
        }

        return myservice;
    }
} 

创建一个正常的类

package demo;

public class MyService_not {

    public void getMyService_not(){
        System.out.println("这是一个非单例模式下的构造方法");
    }
}

接下来我们来看看单例模式和普通类到底有什么区别


写个测试

package demo;

public class Test {

    public static void main(String[] args) {

        // MyService ms1 = new Myservice(); 这种直接通过new的方法创建实例是不会成功的
        MyService myService1 = MyService.getMyServiceInstance();
        MyService myService2 = MyService.getMyServiceInstance();

        //单例模式下实例化的2个对象
        System.out.println(myService1);
        System.out.println(myService2);

        System.out.println(myService1 == myService2);//相等true

        MyService_not not1 = new MyService_not();
        MyService_not not2 = new MyService_not();
        //非单例模式下实例化的2个对象
        System.out.println(not1);
        System.out.println(not2);

        System.out.println(not1==not2);//不相等 false

    }
}

控制台结果

demo.MyService@2f57d162
demo.MyService@2f57d162
true
demo.MyService_not@3639b3a2
demo.MyService_not@6406c7e
false
  • 可以看到从单例模式下,实例化出来的对象是一模一样的,而一般类实例化出的两个对象,是在堆区开辟出两个内存,将这个对象的内存地址传给栈区,栈区的这个对象的引用指向开辟出来的内存,所以两个对象是两块内存,两个地址,所以不一样,而单例模式下,是一块内存。这就是单例模式的特点。
  • 写在后面,这是我第一次写博客,今年刚毕业进入软件岗位,希望和我们一路提高自己,成为攻城狮。谢谢大家,如果觉得对亲有用的话,请顶一下吧


相关文章
|
4天前
|
设计模式 Java
Java中的设计模式及其应用场景解析
Java中的设计模式及其应用场景解析
|
2天前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
20 6
|
2天前
|
设计模式 安全 Java
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
12 1
|
3天前
|
设计模式 Java 数据库连接
Java中的设计模式在实际项目中的应用
Java中的设计模式在实际项目中的应用
|
2天前
|
设计模式 安全 Java
Java面试题:什么是单例模式?如何在Java中实现单例模式?
Java面试题:什么是单例模式?如何在Java中实现单例模式?
8 0
|
2天前
|
设计模式 安全 Java
Java面试题:解释单例模式的实现方式及其优缺点,讨论线程安全性的实现。
Java面试题:解释单例模式的实现方式及其优缺点,讨论线程安全性的实现。
8 0
|
2天前
|
设计模式 存储 缓存
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
7 0
|
2天前
|
设计模式 安全 NoSQL
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
8 0
|
2天前
|
设计模式 安全 Java
Java面试题:如何实现一个线程安全的单例模式,并确保其在高并发环境下的内存管理效率?如何使用CyclicBarrier来实现一个多阶段的数据处理任务,确保所有阶段的数据一致性?
Java面试题:如何实现一个线程安全的单例模式,并确保其在高并发环境下的内存管理效率?如何使用CyclicBarrier来实现一个多阶段的数据处理任务,确保所有阶段的数据一致性?
6 0
|
2天前
|
设计模式 缓存 安全
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
7 0