说一下你对单例模式的理解
设计模式在开发中是重中之重,尤其是单例模式,因此也就成了面试中的高频问题,决定整理一下;如有错误还请个位指正!
@[toc]
什么是设计模式
在说单例模式前我们先说说什么是设计模式;
所谓设计模式,就是一套被反复使用的代码设计经验的总结(情境中一个问题经过证实的一个解决方案)。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计和体系结构;
设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、
原型模式;
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模
式、组合模式、享元模式;
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、
责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解
释器模式;
单例模式
单例就是该类只能返回一个实例;
单例所具备的特点
- 私有化的构造函数
- 私有的静态的全局变量
- 公有的静态的方法
单例实现的主要步骤
- 将该类的构造方法定义为私有方法,(私有化构造器)这样其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例;
- 在该类内提供一个公共静态返回该类实例对象的⽅法,当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;
饿汉式
先初始化对象,Single类⼀进内存,就已经创建好了对象;
public class Single{
//直接创建对象
private static Single s=new Single();
//私有化构造函数
private Single(){
}
//返回对象实例
public static Single getInstance()
{
return s;
}
}
懒汉式
对象是⽅法被调⽤时才初始化,也叫做对象的延时加载;
- Single类进内存,对象还没存在,只有调⽤了getInstance⽅法时,才建⽴对象
public class Single{
//声明变量
private static Single s=null;
//私有构造函数
private Single(){
}
//提供对外方法
public static synchronize Single getInstance()
{
if(s==null){
s=new single();
}
return s;
}
}