java设计模式:单例模式
Posted 测试
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java设计模式:单例模式相关的知识,希望对你有一定的参考价值。
所谓设计模式,就是一套反复会他人使用,大多数人熟知的一种设计模式。
优点:
让代码更容易被他人理解,保证的代码的重用性和可靠性。
单例模式分为两种,一种是饿汉模式,另外一种是懒汉模式。
单例模式适用于那些有且有一个对象的项目,比如说日志,配置文件等。
饿汉模式:
饿汉模式我们可以通过私有的构造方法去实现,这样可以防止外界通过构造方法去创建多个实例,我们可以在类中创建构造方法的唯一实例,下面看具体例子:
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懒汉模式:
1、加载饿汉模式比较慢,因为在加载的时候,他就自动去创建类的实例了,但是在运行时获取对象的速度比较快,因为在访问类的时候,static修饰的就自动执行了。
2、加载懒汉模式比较快,因为在加载类的时候并没有自动去创建,所以在运行的时候是比较慢的,因为在加载类的时候并没有自动去实例化,听着比较绕,但是确实是这样的道理。
--------总结:
饿汉模式是线程安全的,也就是支持对线程,而懒汉模式是线程不安全的,不支持多线程。
饿汉模式是用空间换时间,懒汉模式是用时间换空间。
以上是关于java设计模式:单例模式的主要内容,如果未能解决你的问题,请参考以下文章