单例模式(static应用场景)

发布时间 2023-06-11 20:40:54作者: 初晓臻

 

单例模式(Singleton)
设计-->一个类只能创建一个对象 有效减少内存占用空间
设计一个系统--->百度 搜索引擎
public class Baidu{
public void 搜索(String keyword){
}
}
创建一个Baidu对象 new
调用搜索的方法 做事情 方法执行一遍
同一时间有很多很多很多很多人在使用这个系统
对象--->只创建一个 堆内存中就只开辟一个空间
调用一次方法--->临时执行一次 方法执行空间就回收啦

单例模式的实现
1.私有的构造方法
2.私有的静态的当前类对象作为属性
3.公有的静态的方法返回当前类对象

指的是对象的加载
饿汉式(立即加载) 对象启动时就加载啦
不会产生对象没有就拿来使用的问题 空指针异常
启动项目加载的对象过多 有些还没有使用 产生服务器承载压力的问题


懒汉式(延迟加载) 对象什么时候用到了 才会加载
可能会由于没有操作好 导致异常(很严谨)
启动项目时候只有需要的加载 不需要的还没有创建 不会浪费空间
*生命周期托管(单例对象别人帮我们处理) 对象加载过程交给别人

 

package singleton;

public class SingleTon {
    //通过我的设计 让这个类只能创建一个对象

    //每一个类都有默认无参数的构造方法----公有  在外面可以随意创建
    //1.让构造方法变成私有---保证外面不可以随便创建对象
    private SingleTon(){}
    //2.单例 不是无例 --- 在本类中的某个成员位置上创建唯一的一个对象
    //在以下的四个位置 写一行new SingleTon
    //属性
    //方法------不行  每一次执行都会产生一个过程  保证不了唯一
    //构造方法--不行  私有  本身就是这个构建过程
    //块--------不行  没有返回值  创建了对象也无法给别人使用
    //2.在当前类中存在一个私有的静态属性  是当前类类型的
    private static SingleTon single;//直接 = new Singleton(); 立即加载  饿汉式
    //3.提供一个获取单个对象的方法给用户
    //   返回值  将对象返回出去
    public static SingleTon getSingleTon(){// get类名  newInstance
        if(single == null) {
            single = new SingleTon();//延迟加载的方式  懒汉式
        }
        return single;//引用类型
    }

}

  

package singleton;

public class TestMain {
    public static void main(String[] args){
        SingleTon s1 = SingleTon.getSingleTon();
        SingleTon s2 = SingleTon.getSingleTon();
        System.out.println(s1==s2);//true 比较地址
        System.out.println(s1.equals(s2));//true Object类继承过来的 默认也比地址
        System.out.println(s1);//类全名@hashCode--->16进制的整数
        System.out.println(s2);
    }
}