单例模式(Singleton) 对应的慕课视频:https://www.imooc.com/video/1772
单例设计模式用于保证一个类只有一个实例
他有两种表现形式:懒汉式,饿汉式
饿汉式和懒汉式最明显的区别就是两者对象实例化的时间不相同。
恶汉式是在类加载的时候就创建,懒汉式是在调用实例的时候在加载。
下面来看一下饿汉式的基本代码
package songyan.demo;
//单例模式:保证一个类的实例只有一个
/**
* 单例设计模式-饿汉式
* @author Administrator
*
*/
public class singleton {
//隐藏构造函数
private singleton(){
}
//创建该类的对象
private static singleton instance = new singleton();
//提供反复问内部实例的方法
public static singleton getInstance()
{
return instance;
}
}
饿汉式编写顺序:
隐藏构造函数(将构造函数私有化,防止在类的外部创建对象)
创建该类的对象(private static)
对外提供访问这个对象的方法
懒汉式的实现
package songyan.demo; //单例模式:保证一个类的实例只有一个 /** * 单例设计模式-懒汉式 * @author Administrator * */ public class singleton { private singleton(){} private singleton instance; public singleton getInstance() { instance= new singleton(); return instance; } }
懒汉式的编写顺序与饿汉式相同,不同的是对象实例化的时间,在懒汉式中,是在访问该对象的时候将对象实例化的。
再来比较一下两种实现方式
1,饿汉式在加载类的时候比较慢,但是在运行的时候比较快。(懒汉式相反)
2,饿汉式是线程安全的,而懒汉式是线程安全的
懒汉式的线程安全是可以解决的,可以通过同步代码块或者同步函数来实现,同步代码块要比同步函数更优一些(同步函数的范围太大,同步了不必要的部分,可以使用同步函数仅同步局部即可)
当然使用同步的方式解决多线程的安全问题也是有弊端的,他会降低程序执行的效率,所以在开发过程中更多的是使用饿汉式的实现方式