(面试常问)4种单例设计模式的总结(内含代码以及分析)

单例设计模式:
    单例模式,是一种常见的软件设计模式.在它的核心结构中只包含了一个被称为单例的特殊类.通过单例模式可以保证系统中只有该类的一个实例对象.
 
优点 :
    实例控制:单例模式会阻止其它对象实例化其自己的单例对象的副本,从而确保所有对象都访问的是唯一的实例 
    灵活性:因为类控制了实例化过程,所以类可以很灵活的更改实例化的过程
 
实现单例需要如下几步(基础):
    1私有化构造函数
    2创建一个本类对象
    3 向外提供一个方法,返回这个本类对象
 
1饿汉式
    优点:线程安全,允许多个线程同时访问
    缺点:会提前初始化单例对象(在类加载的时候)
 1 /**
 2 * @Author : zhuhuicong
 3 * 2018/11/27 21:08
 4 * @Version 1.0
 5 * 懒汉式
 6 */
 7 public class SingalDemo01 {
 8 private static SingalDemo01 singalDemo01 = new SingalDemo01();
 9 private SingalDemo01() {
10 }
11 
12 public static SingalDemo01 getInstance(){
13 return singalDemo01;
14 }
15 }
View Code
2懒汉式:
    优点:不会提前初始化单例对象
    缺点:线程不安全
        解决方案可以通过加锁进行解决,但是加锁之后,效率低
 1 /**
 2 * @Author : zhuhuicong
 3 * 2018/11/27 21:12
 4 * @Version 1.0
 5 */
 6 public class SingalDemo02 {
 7 private static SingalDemo02 singalDemo02 = null;
 8 private SingalDemo02() {
 9 }
10 public static synchronized SingalDemo02 getInstance(){
11 if(singalDemo02==null){
12 singalDemo02 = new SingalDemo02();
13 }
14 return singalDemo02;
15 }
16 }
View Code
3 双重检测锁机制:
    线程安全并且不会提前初始化实例对象(注意两次判断检测的作用)
 1 /**
 2 * @Author : zhuhuicong
 3 * 2018/11/27 21:17
 4 * @Version 1.0
 5 */
 6 public class SingalDemo03 {
 7 private static SingalDemo03 singalDemo03 = null;
 8 private SingalDemo03() {
 9 }
10 
11 public static SingalDemo03 getInstance(){
12 if(singalDemo03==null){ //第一个if是为了避免每次进来都加锁,提高效率
13 synchronized (SingalDemo03.class){
14 if(singalDemo03==null){ //第二个if是为了避免生成多个实例对象
15 singalDemo03 = new SingalDemo03();
16 }
17 }
18 }
19 return singalDemo03;
20 }
21 }
View Code
4静态内部类的方式:
    线程安全,并且不会提前初始化(对象只会在内部类加载的时候初始化,内部类只会在调用getInstance()方法的时候加载)
 
 1 /**
 2 * @Author : zhuhuicong
 3 * 2018/11/27 21:24
 4 * @Version 1.0
 5 */
 6 public class SingalDemo04 {
 7 private SingalDemo04() {
 8 }
 9 
10 public static class Inner{
11 public static SingalDemo04 Instance;
12 }
13 
14 public static SingalDemo04 getInstance(){
15 return Inner.Instance;
16 }
17 }
View Code

 

 
 
 
 
 
 
 
 
 
 
posted @ 2018-11-27 23:28  宋佑廉  阅读(696)  评论(0编辑  收藏  举报