java设计模式四之单例设计模式

前言:

    单例设计模式是一种创建对象的模式,保证这个类只有一个实例对象


为什么要使用单例?

  1、减少对象内存占用

  2、共享资源

  3、减少对象创建时间,提高性能


三种模式:

饿汉式

懒汉式

双重验证


代码:

  饿汉式:

package com.xhx.designpattern;

import java.util.Objects;

public class Person {
    private String name;

    //构造函数私有化
    private Person(){}

    //饿汉式  多线程中可以保证是一个对象
    private static final Person person = new Person();

    //提供一个全局的静态方法
    public static Person getPerson(){
        return person;

    }



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

懒汉式1:

package com.xhx.designpattern;

import java.util.Objects;

public class Person2 {
    private String name;

    //构造函数私有化
    private Person2(){}

    //懒汉式  多线程中不可以保证是一个对象
    private static Person2 person ;

    //提供一个全局的静态方法
    public static Person2 getPerson(){
        if(Objects.isNull(person)){
            person=new Person2();
        }
        return person;

    }



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

懒汉式2:

package com.xhx.designpattern;

import java.util.Objects;

public class Person3 {
    private String name;

    //构造函数私有化
    private Person3(){}

    //懒汉式  多线程中不可以保证是一个对象
    private static Person3 person ;

    //提供一个全局的静态方法  解决方案,使用同步方法
    //缺点:影响效率
    public static synchronized Person3 getPerson(){
        if(Objects.isNull(person)){
            person=new Person3();
        }
        return person;

    }



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

懒汉式3:

package com.xhx.designpattern;

import java.util.Objects;

public class Person4 {
    private String name;

    //构造函数私有化
    private Person4(){}

    //懒汉式  多线程中不可以保证是一个对象
    private static Person4 person ;

    //提供一个全局的静态方法
    // 解决方案,同步代码块,双重验证
    public static Person4 getPerson(){
        if(Objects.isNull(person)){
            synchronized (Person4.class) {
                if(Objects.isNull(person)) {
                    person = new Person4();
                }
            }
        }
        return person;

    }



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值