单例设计模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。
1、构造方法是私有化
2、声明一个本类对象
3、给外部提供一个静态方法获取对象实例
两种实现方式:
1、饿汉式:在类被加载后对象被创建,到程序结束后释放
2、懒汉式:在第一次调用getSingleton方法时对象被创建,到程序结束后释放
使用私有构造方法+静态方法 来实现工具类 如:math工具类(全部使用静态方法,耗费内存)
适用场景:
1.在设计一些工具类的时候(通常工具类,只有功能方法,没有属性)
2.工具类可能被频繁调用
使用单例模式的目的:
节省重复创建对象所带来的内存消耗,提高效率
Demo如下:
public class Test { public static void main(String[] args) { Singleton s1 = Singleton.getSingleton(); Singleton s2 = Singleton.getSingleton(); System.out.println(s1==s2);//打印结果为true,说明ok Singleton1 s3 = Singleton1.getSingleton(); Singleton1 s4 = Singleton1.getSingleton(); System.out.println(s3==s4);//打印结果为true,说明ok } } //饿汉式,占用内存时间长,效率高 class Singleton{ private Singleton(){} private static Singleton s= new Singleton(); public static Singleton getSingleton(){ return s; } public void print(){ System.out.println("ok"); } } //懒汉式,占用内存时间段,效率低 class Singleton1{ private Singleton1(){} private static Singleton1 s; public static Singleton1 getSingleton(){ if(s==null){ s= new Singleton1(); } return s; } public void print(){ System.out.println("ok"); } }