设计模式总结(1)

设计模式总结(1)

单例模式

单例模式是java设计模式中较为简单但使用广泛的一种创建型模式。使用这种设计模式的类不需要实例化,可以直接使用并且只能有一个自己创建的实例。这样的优点是在一个类如果需要被频繁使用的场景下可以减少内存开销。
单例模式有多种实现方法:

饿汉式

**
 * 饿汉式
 */
class Singleton1 {
    private static Singleton1 singleton = new Singleton1();

    private Singleton1() {
    }

    public static Singleton1 getInstance() {
        return singleton;
    }
}

饿汉式是一种懒加载的单例模式,只在该类需要被使用的时候才创建出来,并且这是一种线程不安全的单例模式。

懒汉式

/**
 * 懒汉式
 */
class Singleton2 {
    private static Singleton2 singleton;
    private Singleton2(){}

    public static synchronized Singleton2 getInstance() {
        if (singleton == null) {
            singleton = new Singleton2();
        }
        return singleton;
    }
}

懒汉式是一种非懒加载的单例模式,该类在JVM启动的时候便会自动创建,因为加入了synchronized关键字,所以这是一种线程安全的单例模式。
懒汉式与饿汉式的根本区别在与是否在类内方法外创建自己的对象

单例模式的使用

/**
 * 懒汉式使用
 */
class Singleton2 {
    private static Singleton2 singleton;
    private static int i;
    private Singleton2(){
        i=3;
    }

    public static synchronized Singleton2 getInstance() {
        if (singleton == null) {
            singleton = new Singleton2();
        }
        return singleton;
    }

    public void sayHelle() {
        System.out.println(i++);
    }
}
/**
 * 测试
 */
public static void main(String[] args){
Singleton2 singleton21 = Singleton2.getInstance();
singleton21.sayHelle();   //3
Singleton2 singleton22 = Singleton2.getInstance();
singleton22.sayHelle();   //4
Singleton2 singleton23 = Singleton2.getInstance();
singleton23.sayHelle();   //5
}

双重锁模式

/**
 * 双重锁模式
 */
class Singleton3 {
    private static volatile Singleton3 instance = null;

    private Singleton3() {
        //do something
    }

    public static Singleton3 getInstance() {
        if (instance == null) {
            synchronized (Singleton3.class) {
                if (instance == null) {
                    instance = new Singleton3();
                }
            }
        }
        return instance;
    }
}

单例设计模式还有一种双重锁的实现方法,这是一种懒加载、线程安全的单例模式。

使用单例模式时,不要采用反射构造新实例,否则就失去了单例模式的意义。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值