【Java】单例模式

单例模式

  • 设计模式概述
  • 单例模式
    • 实现思路
      • 饿汉式
      • 懒汉式
      • 饿汉式 vs 懒汉式

设计模式概述

设计模式是在大量的实践中总结理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。就像是经典的棋谱,不同的棋局,我们用不同的棋谱。“套路”

经典的设计模式共有23种。每个设计模式均是特定环境下特定问题的处理方法。
【Java】单例模式_第1张图片

单例模式

所谓单例模式就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法

实现思路

  1. 如果我们要让类在以恶个虚拟机中只能创建一个对象,我们必须将构造器的访问权限设置为private ,这样我们就不能在类外部用new来创建对象的实例,但是在类内仍然可以创建该对象的实例
  2. 因为我们的构造方法是private修饰的,所以我们在类的外部开始无法得到类的对象,只能调用该类的某个静态方法来通过返回值的方式来取得对象**,静态方法中只能访问类中的静态成员变量,所以,指向类内部产生的该类对象也必须定义成静态的.**

饿汉式

public class singleInstanceTest {
    //类内部提供一个该类的实例
    private static singleInstanceTest instanceTest = new singleInstanceTest();
    //定义private修饰的构造器
    private singleInstanceTest() {

    }
    //提供静态的get方法获取实例
    public static singleInstanceTest getInstance() {
        return instanceTest;
    }
}

懒汉式

public class singleInstanceTest2 {
    //创建时不实例化
    private static singleInstanceTest2 single = null;

    //私有化构造器
    private singleInstanceTest2(){

    }
    //公共的get方法来获取实例
    public static singleInstanceTest2 getInstance(){
        //如果没有创建过实例则创建实例
        if(single == null){
            single = new singleInstanceTest2();
        }
        return single;
    }
}

饿汉式 vs 懒汉式

饿汉式

  1. 特点: 立即加载,类在使用时就已经将对象创建完毕
  2. 优点: 实现简单 没有线程安全问题
  3. 缺点: 类被加载时会直接初始化static的实例,静态变量被创建并分配空间,从此以后,这这个static的实例便一直占用这一块内存,知道类被卸载时,静态变量才会被销毁,并且释放占用的内存,因此在特定情况下会`耗费内存

懒汉式

  1. 特点: `延迟加载``,在调用静态方法时实例才会被创建
  2. 优点: 实现起来比较简单;当类被加载的时候,static的实例未被创建并分配内存空间,当静态方法第一次被调用时,初始化实例变量,并分配内存,因此在某些特定条件下会节约内存
  3. 在多线程环境中,这种实现方法是完全错误的,线程不安全,根本不能保证单例的唯一性。

你可能感兴趣的:(Java,java,单例模式,开发语言)