一.单例模式
设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
目的:使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
基本模式有23种:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式...
1. 单例模式简介
有些对象我们只需要有一个,比如:配置文件、工具类、线程池、缓存、日志对象等。
如果创造出多个实例,就会导致许多问题,比如占用过多资源,不一致的结果等。
怎样保证整个应用中某个实例有且只有一个呢,可以通过单例来实现。
2. 单例模式的实现
2.1单例模式的饿汉式实现
/*
* 单例模式Singleton
* 应用场合:有些对象只需要一个就足够了,如古代皇帝
* 作用:保证整个应用程序中某个实例有且只有一个
* 类型:饿汉模式、懒汉模式
*/
public class Singleton {
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton() {
}
//2.创建类的唯一实例,使用private static修饰
private static Singleton instance=new Singleton();
//3.提供一个用于获取实例的方法,使用public static修饰
public static Singleton getInstance() {
return instance;
}
}
public class Test {
public static void main(String[] args) {
Singleton s1=Singleton.getInstance();
Singleton s2=Singleton.getInstance();
if(s1==s2)
System.out.println("s1和s2是同一个实例");
else
System.out.println("s1和s2不是同一个实例");
}
}
2.2 单例模式的懒汉式实现
/*
* 懒汉模式
*/
public class Singleton2 {
//1.将构造方法私有化,不允许外部直接创建
private Singleton2() {
}
//2.声明类的唯一实例,使用private static修饰,此处并不实例化
private static Singleton2 instance;
//3.提供一个用于获取实例的方法,使用public static修饰
public static Singleton2 getInstance() {
if(instance==null) {
instance=new Singleton2();
}
return instance;
}
}
public class Test {
public static void main(String[] args) {
Singleton2 s1=Singleton2.getInstance();
Singleton2 s2=Singleton2.getInstance();
if(s1==s2)
System.out.println("s1和s2是同一个实例");
else
System.out.println("s1和s2不是同一个实例");
}
}
1. “饿汉”模式和“懒汉”模式的区别
区别:饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快。线程安全
懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢。线程不安全