单例(Singleton)模式定义
仅具有一个实例的类,并且只有该类可以创建该实例的模式。 例如,在Windows中只能打开一个任务管理器,这样可以避免由于打开多个任务管理器窗口或每个窗口中显示的内容不一致等错误而造成的内存资源浪费。
单例模式具有三个特征
1.单例类只有一个实例对象;2.单例对象必须由单例类自己创建;3.单例类对外提供一个访问该单例的全局访问点。
单例模式的分类和实现
单例模式是设计模式中最简单的模式之一。 公共类的构造函数是公共的,而外部类可以通过“new构造函数()”生成多个实例。 但是,如果将类的构造函数设为私有,则外部类无法调用该构造函数,并且不能生成多个实例。 这时,类本身必须定义一个静态私有实例,并提供一个静态公共函数来创建或获取静态私有实例。
单例模式的分类
1.懒汉式2.饿汉式
懒汉式的实现
// 懒汉式举例
public class Demo
{
private static volatile Demo instance=null;
private Demo (){} //私有构造
public static synchronized Demo getInstance()
{
if(instance==null)
{
instance=new Demo();
}
return instance;
}
}
懒汉式的缺点:每次使用对象都会被锁住,对程序的性能不太友好
饿汉式的实现
// 饿汉式举例
public class Demo
{
private static final Demo instance=new Demo();
private Demo (){} //私有构造
public static Demo getInstance()
{
return instance;
}
}
饿汉式的优点:在类被初始化的时候就实例化了一个对象,在多线程的环境下不会出现多例和性能问题,在实际使用的时候,可优先考虑饿汉式