设计模式介绍:
设计模式也就是反复会他人利用,大多数人熟知的一种设计模式。
优点:
让代码更容易被他人理解,保证了代码的重用性和可靠性。
单例模式:
单例模式分为两种,一种是饿汉模式,另一种是懒汉模式。
单例模式适用于那些有且有一个的对象,比如说日志、配置文件等。
饿汉模式:
饿汉模式我们可以通过私有的构造方法去实现,这样可以防止外界通过构造方法去创建多个实例,我们可以在类中创建一个构造方法的唯一实例,下面看下例子:
首先创建实例类:
public class guohe {
//创建一个静态的构造方法,防止外部直接调用
private guohe(){
}
//创建本类的唯一实例
private static guohe Instace = new guohe();
//提供给外部调用的唯一实例
public static guohe getInstace(){
return Instace;
}
}
测试类:
public class use {
public static void main(String[] args) {
guohe guohe01 = guohe.getInstace();
guohe guohe02 = guohe.getInstace();
if (guohe01 == guohe02){
System.out.println("他们两个是同一个实例");
}else {
System.out.println("他们两个不是同一个实例");
}
}
}
输出结果:
他们两个是同一个实例
那么饿汉模式到底体现在哪里呢?上面代码中提供的实例是用static
修饰的,也就是说类被加载的时候,他就会自动被加载,就像一个饿汉,想尽快的早些吃饱。
懒汉模式:
先直接贴代码,再说下他自身的特点和与饿汉模式的区别:
public class guohe {
//创建一个静态的构造方法,防止外部直接调用
private guohe(){
}
//声明实例,但是并不去创建
private static guohe Instace;
//提供给外部调用的唯一实例
public static guohe getInstace(){
if (Instace == null){
Instace = new guohe();
}
return Instace;
}
}
调用的main方法和上面的保持不变,就不贴了。
我们看到,在懒汉模式中我们只是声明类的实例,但是并没有去实例化,也就是说,当类被加载的时候,并没有去创建唯一的实例,而是当用户去获取的时候,他才去做做判断,如果为空的话,才会去获取。
当第一个用户使用懒汉模式去获取的话,那么以后的第二个用户或者第N个用户去获取的话,类的实例已经存在了,他就不会去创建类的是实例了,这个我们称为懒汉模式。
饿汉模式PK懒汉模式:
加载饿汉模式的时候比较慢,因为在加载的时候,他就自动去创建类的实例了,但是在运行时获取对象的速度比较快,因为类在加载的时候就已经创建了。
加载懒汉模式的时候比较快,因为相对来说在类被加载的时候并没有去创建类的实例,但是在运行的时候比较慢,因为在加载类的时候他并没有去创建类的实例,他还需要创建实例的这一个过程,所以运行速度相对来说比较慢。
另外一个区别就是:
饿汉模式是线程安全的,也就是支持对线程,而懒汉模式是线程不安全的,不支持多线程
饿汉模式是用空间换时间,懒汉模式是用时间换空间。