单例设计模式

单例设计模式的概述

单例模式,是一种常用的软件设计模式。通过单例模式可以保证系统中,应用该模式的这个类只有一个实例。即一个类只有一个对象实例。

单例设计模式实现步骤

  1. 将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。
  2. 在该类内部产生一个唯一的实例化对象
  3. 定义一个静态方法返回这个唯一对象。

例设计模式的类型

根据实例化对象的时机单例设计模式又分为以下两种:

  1. 饿汉单例设计模式
  2. 懒汉单例设计模式

饿汉式单例设计模式

饿汉单例设计模式就是使用类的时候已经将对象创建完毕,不管以后会不会使用到该实例化对象,先创建了再说。很着急的样子,故被称为“饿汉模式”。

// 饿汉式单例设计模式:比较着急,不顾以后用不用该类的对象,先创建了再说
public class Person {
    // 1.将构造方法私有化,防止外界直接通过new调用本类构造方法创建对象
    private Person(){

    }

    // 2.在本类中创建该类的唯一对象
    private static final Person p = new Person();

    // 3.提供一个公共的静态方法用来获取该类的唯一对象
    public static Person getInstance(){
        return p;
    }

    // public static void method(){}
}

// 测试类
public class Test {
    public static void main(String[] args) {
        Person p1 = Person.getInstance();
        Person p2 = Person.getInstance();
        Person p3 = Person.getInstance();
        Person p4 = Person.getInstance();
        System.out.println(p1);
        System.out.println(p2);
        System.out.println(p3);
        System.out.println(p4);
    }
}

输出

com.itheima.demo1_单例设计模式.饿汉设计模式.person@4554617c
com.itheima.demo1_单例设计模式.饿汉设计模式.person@4554617c
com.itheima.demo1_单例设计模式.饿汉设计模式.person@4554617c
com.itheima.demo1_单例设计模式.饿汉设计模式.person@4554617c

懒汉式单例设计模式

懒汉单例设计模式就是调用getInstance()方法时实例才被创建,先不急着实例化出对象,等要用的时候才实例化出对象。不着急,故称为“懒汉模式”。

代码



    // 懒汉单例设计模式:就是调用getInstance()方法时才创建对象,先不急着创建对象,等要用的时候才创建对象。
    public class Person {
        // 1.将构造方法私有化,防止外界直接通过new调用构造方法创建对象
        private Person(){
    
        }
    
        // 2.定义一个该类的成员变量,用来存储第一次创建的该类对象
        private static Person p;
    
        // 3.提供一个公共的静态方法获取该类的唯一对象
        public static synchronized Person getInstance(){
            // 第一次调用该方法的时候就创建该类的对象,后序调用该方法都是获取第一次调用时创建的该类对象
            if (p == null){
                // 问题:线程1,线程2都通过了判断,那2条线程都会new对象
                // 解决:整个方法加锁
                p = new Person();
            }
            return p;
        }
    
       // public static void method(){}
    }

注意:懒汉单例设计模式在多线程环境下可能会实例化出多个对象,不能保证单例的状态,所以加上关键字:synchronized,保证其同步安全。

小结

单例模式可以保证系统中一个类只有一个对象实例。

实现单例模式的步骤:

  1. 将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。
  2. 在该类内部产生一个唯一的实例化对象,并且将其封装为private static类型的成员变量。
  3. 定义一个静态方法返回这个唯一对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值