经常有笔试题,让写一个单例模式,其实只有真正懂了这些设计模式,才能够随手写来,否则真是记一遍忘一遍啊,在这里我将我理解的几种设计模式写下来,方便日后复习。
单例模式
概念:简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例。
1.懒汉式写法:
当程序第一次访问单例模式实例时才进行创建。适用场景:单例模式实例在系统中很少用到时
/**
* 单例模式(线程安全)
* 懒汉式写方法
* @author Administrator
*
*/
public class Singleton{
private static Singleton singleton;
//私有无参构造方法
private Singleton(){
}
public static synchronized Singleton getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
2.饿汉式写法
在程序启动或单例模式类被加载的时候,单例模式实例就已经被创建。
适用场景:单例模式实例在系统中经常会被用到时
/**
* 饿汉式写法
* @author Administrator
*
*/
public class Singleton{
private static Singleton singleton = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return singleton;
}
}
3.静态内部类写法
/**
* 静态内部类写法
* @author Administrator
*
*/
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
4.枚举类写法
public enum Singleton {
INSTANCE;
public void whateverMethod() {
}
}
个人感觉前3种写法比较常用,大家可以根据情况选择不同的写法。