设计模式--单例模式

标题单例模式

好处:保证系统中只有该类的一个实例,防止频繁创建销毁对象。

1:饿汉式:直接在全局进行创建

class Singleton_1 {
   private Singleton_1() {

    }

    // 在装载的时候就进行了类加载,会造成内存浪费
    private static Singleton_1 singleton_1 = new Singleton_1();

    public static Singleton_1 getInstance() {
        return singleton_1;
    }
}

2:饿汉式:使用构造函数创建

// 构造方法中创建
class Singleton_2 {
    // 在装载的时候就进行了类加载,会造成内存浪费
    private static Singleton_2 singleton_2;

    private Singleton_2() {
        singleton_2 = new Singleton_2();
    }


    public static Singleton_2 getInstance() {
        return singleton_2;
    }
}

3:饿汉式:使用静态代码块

class Singleton_3 {
    // 在装载的时候就进行了类加载,会造成内存浪费
    private static Singleton_3 singleton_3;

    Singleton_3() {

    }

    static {
        singleton_3 = new Singleton_3();
    }

    public static Singleton_3 getInstance() {
        return singleton_3;
    }
}

4:懒汉式:判断为空创建

// 懒汉式 ,线程不安全
class Singleton_4 {
   private Singleton_4() {

    }

    // 在装载的时候就进行了类加载,会造成内存浪费
    private static Singleton_4 singleton_4;

    public static Singleton_4 getInstance() {
        if (singleton_4 == null) {
            singleton_4 = new Singleton_4();

        }
        return singleton_4;
    }
}

5:懒汉式:获取实例时加sync


// 懒汉式 ,线程安全, 效率太低, 不推荐
class Singleton_5 {
    Singleton_5() {

    }

    // 在装载的时候就进行了类加载,会造成内存浪费
    public static Singleton_5 singleton_5;

    public static synchronized Singleton_5 getInstance() {
        if (singleton_5 == null) {
            singleton_5 = new Singleton_5();

        }
        return singleton_5;
    }
}

6:懒汉式:创建时加sync

class Singleton_6 {
    Singleton_6() {

    }

    // 在装载的时候就进行了类加载,会造成内存浪费
    private static Singleton_6 singleton_6;

    public static Singleton_6 getInstance() {
        if (singleton_6 == null) {
            synchronized (Singleton_6.class) {
                singleton_6 = new Singleton_6();
            }

        }
        return singleton_6;
    }
}


7:双重检测:获取实例时加sync,创建时加sync

// 推荐
class Singleton_7 {
    Singleton_7() {

    }

    
    private static volatile Singleton_7 singleton_7;

    public static synchronized Singleton_7 getInstance() {
        if (singleton_7 == null) {
            synchronized (Singleton_7.class) {
                if (singleton_7 == null) {
                    singleton_7 = new Singleton_7();
                }
            }

        }
        return singleton_7;
    }
}

8:静态内部类

// 推荐 静态内部类
class Singleton_8 {
    Singleton_8() {
    }

    public static class GetInstance {
        private static final Singleton_8 INSTANCE = new Singleton_8();
    }

    private static  Singleton_8 getInstance() {
        return GetInstance.INSTANCE;
    }
}

9:枚举

// 使用枚举可以实现单例  推荐
enum Singleton {
    INSTANCE;

    public void say() {
        System.out.println("ok---");
    }
}

单例模式应用

JDK 中Runtime饿汉式的使用
在这里插入图片描述

资源下载链接为: https://pan.quark.cn/s/0c983733fad2 本文主要回顾了2021年之前及2021年中国科学技术大学软件学院(简称“中科大软院”)高级软件工程(MN)专业的考试情况,重点聚焦于编程题。编程题在考试中的占比不断提高,因此考生需要深入理解这些题目及其解题方法。 中科大软院的高级软件工程专业致力于培养具备深厚理论基础和强大实践能力的高级软件人才。课程设计注重理论与实践相结合,以满足软件行业对高素质工程师的需求。考试内容通常涵盖计算机基础知识、软件工程理论、编程语言、数据结构与算法、操作系统、数据库系统等多个领域。2021年的考试中,编程题的比重进一步提升,这体现了学院对学生实际编程能力和问题解决能力的重视。 编程题通常涉及常见的编程问题,例如字符串处理、数组操作、递归算法、图论问题等,也可能包括网络编程、数据库查询或系统设计等特定领域的应用。考生需要熟练掌握至少一种编程语言,如C++、Java、Python等,并具备较强的算法分析和实现能力。在解题过程中,考生需要注意以下几点:一是准确理解题目要求,避免因误解而导致错误;二是合理选择并设计算法,考虑时间复杂度和空间复杂度,追求高效性;三是遵循良好的编程规范,注重代码的可读性和可维护性;四是考虑边界条件和异常情况,编写健壮的代码;五是编写测试用例,对代码进行充分测试,及时发现并修复问题。 对于备考的同学,建议多做历年试题,尤其是编程题,以熟悉题型和解题思路。同时,可以参加编程竞赛或在在线编程平台(如LeetCode、HackerRank)进行实战训练,提升编程和问题解决能力。此外,关注PPT中的编程代码也很关键,因为这些代码可能是老师给出的示例或解题思路,能够帮助学生更好地理解和掌握编程题的解法。因此,考生需要深入学习PPT内容,理解代码逻辑,并学会将其应用到实际编程题目中。 总之,对于
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值