单例模式
开始学习设计模式,总是觉得自己的代码写的又烂又丑的,看着那些大神写的那么优美,所以设计模式开搞。
先从最简单的单例模式开始:
单例模式的特点:
- 单例类只能有一个实例
- 单例类必须自己创建自己的唯一实例
- 单例类必须给其他的对象提供这一单例
单例的模式用在那些只需要单一实例的地方,像流行的第三方图片加载库UIL的初始化ImageLoader imageLoader = ImageLoader.getInstance();
加载图片的对象只有一个就够了,他会为我们分配资源等。下面来实现一下简单的单例模式。
这里说的单例模式暂时只说两种最常见的(我菜还没使过那些高级用法):
饿汉模式
先看代码吧
/**
* 饿汉式单例
* 线程安全 类创建时就实例化一个对象
* @author Mr_Wrong
*
*/
public class Singleton2{
private Singleton2(){}
private static final Singleton2 Singleton = new Singleton2();
public static Singleton2 getnInstance(){
return Singleton;
}
}
先重写默认的构造函数,将其设为private,确保外界没法直接new出一个对象,然后创建一个static,final的单例对象,这是静态且是常量,只会在类创建时创建一次新的对象。然后通过一个public的getInstance的方法暴露出去。这种单例模式是线程安全的(我也不是很熟啊)。因为这个是static的,在构造函数之前就会执行,所以不能创建代参数的单例。
懒汉模式
代码伺候:
/**
* 懒汉式单例
* 线程不安全 使用时才创建对象 当需要传递参数进去构造函数 使用
* @author Mr_Wrong
*
*/
public class Singleton1{
private Singleton1(){};
private static Singleton1 Singleton= null;
public static Singleton1 getInstance(){
if(Singleton == null){
Singleton = new Singleton1();
}
return Singleton;
}
}
这种是线程不安全的,是在类创建的时候才执行初始化。(我也不熟(逃))。
然后使用的时候就直接调用getInstance方法而不用去new一个出来了Singleton1 singleton1 = Singleton1.getInstance();
这是设计模式中最简单了一个了,下期开始搞点别的了。