创建型模式之单例模式

单例模式应用的比较广泛,核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。

优点:

  • 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。
  • 2、避免对资源的多重占用(比如写文件操作)。

缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

package test;

public class SingletonDemo1 {
/*单例模式 饿汉模式
* */
//类初始化时,立即加载这个对象,线程安全。缺点不能延迟加载
private static SingletonDemo1 st=new SingletonDemo1();
private SingletonDemo1() {}

//方法没有同步,调用效率高
public static SingletonDemo1 getSt() {
return st;
}
}

/**
* 单例模式之懒汉模式
* @author admin
*
*/
//类加载时不初始化,真正调用方法时才创建;能够延时加载
public class SingletonDemo2 {
private static SingletonDemo2 st;
private SingletonDemo2() {}
//缺点调用效率不高,加入同步锁,是因为线程在进行并发操作时,A刚结束,
//B线程又调用了方法创建了两个对象,不符合单例模式
public static synchronized SingletonDemo2 getSt() {
if(st==null) {
st=new SingletonDemo2();
}
return st;

}
}

package test;
/**
* 静态内部类实现单例模式
* @author admin
*
*/
//既能懒加载,调用效率高,线程安全。
public class SingletonDemo4 {
private static class SingletTonclassInstance{
private static final SingletonDemo4 instance=new SingletonDemo4();
}
private SingletonDemo4() {

}
public static SingletonDemo4 getInstance() {
return SingletTonclassInstance.instance;
}
}

package test;
/**
* 枚举类实现单例模式
* @author admin
*
*/
public enum SingletonDemo5 {
//这个枚举元素,本身就是单例对象,无懒加载
INSTANCE;
public void SingletonDemo5() {
//添加自己需要的操作
}
}

(后续还要补充,单例模式应用)

posted @ 2020-05-14 22:53  勤奋的小蜜蜂1号  阅读(128)  评论(0编辑  收藏  举报