23中设计模式-单例模式

概述:

保证一个类仅有一个对象,并提供一个访问它的全局访问点。当系统需要某个类只能有一个实例时,就可以采用单例模式。
特点:单例类只有一个实例;单例类必须自己创建自己唯一的实例;单例类必须给其他所有对象
单例模式的实现方式。

1,直接实例化。

public class singleton{
  private singleton(){ };
private static final singleton single = new singleton();
public static singleton getInstance(){
    return single;
      }
}

2,延迟话实现

 public static class Singleton2{
        private Singleton2(){}
        private static Singleton2 single = null;
        public static Singleton2 getInstance(){
            if(single == null){
                single = new Singleton2();
            }
            return  single;
        }
    }

延迟创建是线程不安全的,在多线程中可能会创建多个实例,所以需要改进。
1,完全同步方法
在原有的代码基础上的成员函数前面加上synchronized

public static  synchronized Singleton2 getInstance()

2,部分同步方法

public static class Singleton2{
        private Singleton2(){}
        private static Singleton2 single = null;
        public static   Singleton2 getInstance(){
            synchronized(Singleton2.class){
            if(single == null) {
                single = new Singleton2();
                }
            }
            return  single;
        }
    }

3,静态内部类

import java.lang.reflect.*;
import java.util.Scanner;

public class test {
 public static class Singleton3{
        private static class My{
            private static final Singleton3 single = new Singleton3();
        }
        private  Singleton3(){
            System.out.println("this is a new instance!");
        }
        public static final Singleton3 getInstance(){
            return My.single;
        }
    }
    public static void main(String []args)throws Exception {
        Scanner s = new Scanner(System.in);
        s.next();
        Singleton3 obj = Singleton3.getInstance();
        Singleton3 obj2 = Singleton3.getInstance();
    }

}

方法三与1,2相比最大的不同就是在于类中没有使用synchromized关键字,因而提高了java虚拟机的维护效率。它是通过静态内部类My来实现单例对象的。而且对象My.single是线程安全的。

应用场景:

由于以上两点可知单例模式的使用对于系统的关键组件和频繁使用的对象来说是可以有效的改善系统的性能的。

spring 的 bean 默认是单例模式的。
作者:hlchengzi
链接:https://www.jianshu.com/p/974c3f31f635
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值