设计模式之单例模式

1.定义

单例模式:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如:Windows中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示的内容不一致。


2.特点

  • 只有一个实例对象
  • 该单例对象必须有单例类自行创建
  • 单例类对外提供一个访问该单例的全局访问点

3.实现

单例模式的实现方式有两种:懒汉模式和饿汉模式

懒汉模式

简介:类加载时没有生成单例,只有第一次调用访问点方法时才会去创建这个单例。

package ink.poesy.design;

/**
* 单例模式
* Singleton(单例)
*/
public class LazySingleton {
    //volatile (共享变量):是指可以同时被多个线程访问的变量,共享变量是被存放在堆里面,所有的方法内临时变量都不是共享变量。
    //具有synchronized关键字的“可见性”,但是没有synchronized关键字的“并发正确性”,也就是说不保证线程执行的有序性。
    //相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。
    private static volatile LazySingleton lazySingleton = null; //保证lazySingleton在所有线程中同步
    
    private LazySingleton(){} //private 避免类在外部被实例化
    
    public static synchronized LazySingleton getLazySingleton(){
        //getLazySingleton方法前加同步
        if(lazySingleton == null){
            lazySingleton = new LazySingleton();
        }
        return lazySingleton;
    }
}

注意:如果编写的是多线程程序,则不要删除上例代码中的关键字 volatile 和 synchronized,否则将存在线程非安全的问题。如果不删除这两个关键字就能保证线程安全,但是每次访问时都要同步,会影响性能,且消耗更多的资源,这是懒汉式单例的缺点。

饿汉模式

该模式的特点是类一旦加载就创建一个单例,保证在调用 getHugrySigleton方法之前单例已经存在了。

package ink.poesy.design;

/**
 * 单例模式:饿汉实现
 */
public class HungrySingleton {
    private static final HungrySingleton hugrySigleton = new HungrySingleton();
    private HungrySingleton(){}

    public static HungrySingleton getHugrySigleton(){
        return hugrySigleton;
    }
}

4.示例

一夫一妻制度:一个丈夫只能有一个妻子,或一个妻子只能有一个丈夫。懒汉模式实现它

package ink.poesy.design;

import java.util.Date;

/**
 * 一夫一妻制度
 */
public class Monogamy {
    public static void main(String[] args) {

        Wife w1 = Wife.getInstance();
        w1.getTime();
        Wife w2 = Wife.getInstance();
        w2.getTime();

        if(w1 == w2){
            System.out.println("他们是同一人!");
        }
        else
        {
            System.out.println("他们不是同一人!");
        }
    }

    static class Wife{
        private static volatile Wife instance = null;

        long time ;

        private Wife(){
            time = new Date().getTime();
            System.out.println("结婚~恭喜恭喜");
        }

        public static synchronized  Wife getInstance(){
            if(instance == null){
                instance = new Wife();
            }else{
                System.out.println("已经结婚,不能再另外妻子!");
            }
            return instance;
        }

        public void getTime(){
            System.out.println("结婚日期:"+time);
        }
    }
}

运行效果
懒汉模式运行效果


注明:以上内容如有争议、指正,留言给我~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

园长的牧歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值