单例模式
Posted hsy-go
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。
单例模式(SingleTon)
设计——一个类只能创建一个对象 有效减少内存占用空间
因为可能同一时间有很多人同时使用这个系统
单例模式的实现
1、私有的构造方法——(确保类外不能随意创建)
2、私有的静态的当前类属性——(私有确保类外不能随意创建,静态确保属性只能加载一次)
3、公有的静态的获取单个对象的方法——(若不加static 类外要产生调用此方法,需要先创建对象,而没有对象)
饿汉式(立即加载) 对象启动就加载
不会产生空指针异常
可能增加服务器压力
懒汉式(延迟加载)对象用到的时候加载
可能会由于没有操作好 导致异常
不会浪费空间
生命周期托管(单例对象帮我们处理)对象加载过程交给别人
package singleton; public class SingleTon { //经过设计 使得该类只能创建一个对象 //构造方法--公有 在外面可以随意创建 //1.让构造方法变成私有 private SingleTon(){} //2.单例 不是无例--在本类的某个成员位置上创建唯一的一个对象 //在以下的四个位置 写一行new SingTon //属性 //方法——不行,每次执行都会产生一个过程 创建一个对象 不能保证唯一 //构造方法——不行 私有 本身是构建对象的过程 //块——不行 没有返回值 创建对象了也没法给别人使用 //3、在当前类中存在一个私有的静态属性 是当前类类型的 private static SingleTon single ;//直接=new SingleTon() 懒汉加载 ;如果不加static 会产生栈内存溢出 //4、提供一个获取单个对象的方法 //返回值?有 //外面要调方法 但是并没有对象 将该方法设置为静态 通过类名直接调用 public static SingleTon getSingleTon(){ if(single == null){ single = new SingleTon();//延迟加载的方式 } return single; } }
package singleton; public class Test { public static void main(String[] args) { SingleTon s1 = SingleTon.getSingleTon();//通过类名访问静态方法 SingleTon s2 = SingleTon.getSingleTon(); System.out.println(s1 == s2);//比较地址 System.out.println(s1.equals(s2));//默认也比地址 } }
以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章