在做Java开发过程中,常常使用设计模式会使我们的开发效率大大提高。面试中也常常会问道关于设计模式的相关问题,本文提供Java的一种设计模式《单例模式》。这种模式可用于Java后端和Android开发的一部分同学。
所谓单例模式就是在内存中只实例化一个类,对于比较耗内存的类,实例化一次,大大提高了开发的效率。单例模式一共分为两种,分别是懒汉式和饿汉式。
懒汉式:
优点:第一次调用才开始初始化,避免的内存的消耗。
缺点:必须加锁关键字才能保证线程的安全,影响效率
public class Singleton {
//1.私有一个成员变量
private static Singleton instance;
//2.私有一个构造方法
private Singleton (){}
//3.提供一个对外接口,同时用synchronized关键字保证线程安全
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
//用来测试的方法
public void showMessage(){
System.out.println("Hello 懒汉式!");
}
}
饿汉式:这种方法比较常用,但容易产生垃圾对象
优点:不用加锁,效率高
缺点:类一旦加载就初始化,浪费内存
public class SingleObject {
//1.让构造函数为 private,这样该类就不会被实例化
private SingleObject(){}
//2.私有SingleObject 的一个对象
private static SingleObject instance = new SingleObject();
//3.提供一个对外的接口,用来获取SingleObject对象
public static SingleObject getInstance(){
return instance;
}
//用来测试的方法
public void showMessage(){
System.out.println("Hello 饿汉式!");
}
}
main方法
public static void main(String[] args) {
SingleObject.getInstance().showMessage();//饿汉式
Singleton.getInstance().showMessage(); //懒汉式
}
一般情况下,我们不建议使用懒汉式,因为在多线程的执行中,会出现线程不安全的情况。如果把方法加上锁,就会大大降低代码的执行效率,非常不利于开发。