---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------
定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
类型:创建类模式
从上面的类图中可以看出,在单例类中有一个构造函数 Singleton ,
但是这个构造函数却是私有的(前面是“ - ”符号),
然后在里面还公开了一个 GetInstance()方法,
通过上面的类图不难看出单例模式的特点,从而也可以给出单例模式的定义
单例模式保证一个类仅有一个实例,同时这个类还必须提供一个访问该类的全局访问点。
要素:
1、私有的构造方法
2、指向自己实例的私有静态引用
3、以自己实例为返回值得静态公有的方法
饿汉单例
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return singleton;
}
}
懒汉单例
public class Singleton {
private static Singleton singleton;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
注意事项:
1、只能使用单例类提供的方法得到单例对象,不要使用反射,否则将会实例化一个新对象。
2、不要做断开单例类对象与类中静态引用的危险操作。
3、多线程使用单例使用共享资源时,注意线程安全问题。
懒汉单例线程不安全,加synchronized关键字修饰后,对性能有部分影响,但是却是线程安全的,并不会产生实例化多个对象的情况。
单例类,饿汉和懒汉由于构造方法是private,所以是不可继承。其他单例模式可以继承
Java中饿汉单例要优于懒汉单例
---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------