单例模式的两种实现方法

首先我们应该知道什么是单例模式:

首先这个类只能有一个实例,而且它必须自行创建这个实例,还有它必须自行 向整个系统提供这个实例。

那我们为什么要用单例模式呢?

因为他在我们开发时起到解决多线程并发访问的问题;还有节约系统内存,提交系统运行的效率,提高系统性能。单例模式也是从建筑方面派生出来的,例如:教室门就是一个很好地例子,不是单例模式的就是说一个人就有一个教室门,他的优点就是线程安全,但是他很浪费资源,所以在这里提出要用单例模式。但单例模式也有许多不足之处,如开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。

然而实现单例模式的有好多种方法:懒汉模式、饿汉模式等等。

今天就让我来说一下饿汉模式和懒汉模式。

饿汉模式:见名知意,“他”很饿,迫切需要找到吃的... 所以 饿汉模式需要 第一时间 “找到吃的”(构建对象)

 1 /**
 2  * 饿汉模式
 3  */
 4 public class HungrySingleton {
 5     private static  HungrySingleton instance=new HungrySingleton();
 6 
 7     /**
 8      * 禁止外部构建
 9      */
10     private HungrySingleton(){}
11 
12     /**
13      * 由外部调用
14      * @return
15      */
16     public static HungrySingleton getInstance(){
17         return instance;
18     }
19 
20     /**
21      * 测试
22      * @param args
23      */
24     public static void main(String[] args) {
25         for(int i=0;i<20;i++){
26             new Thread(()->{
27                 System.out.println(HungrySingleton.getInstance());
28             }).start();
29         }
30     }
31 
32 }

懒汉模式:和饿汉模式不同,懒汉模式并不会一开始声明对象,而是需要等到调用时再声明对象。他很懒,所以你叫“它”它才会动...

 1 /**
 2  * 懒汉模式
 3  */
 4 public class LazybonesSingleton1 {
 5     //先声明
 6     private static LazybonesSingleton instance;
 7     /**
 8      * 禁止外部构建
 9      */
10     private LazybonesSingleton(){}
11 
12     /**
13      * 对外提供调用方法
14      * @return
15      */
16     public static LazybonesSingleton getInstance() {
17         if(instance==null){
18             instance=new LazybonesSingleton();
19         }
20 
21         return instance;
22     }
23 
24     /**
25      * 测试
26      * @param args
27      */
28     public static void main(String[] args) {
29         for(int i=0;i<20;i++){
30             new Thread(()->{
31                 System.out.println(LazybonesSingleton.getInstance());
32             }).start();
33         }
34     }
35 
36 
37 }

初入江湖望各位大侠能够指点,3ks

猜你喜欢

转载自www.cnblogs.com/wang-ren/p/11858354.html