• Java 设计模式——单例模式


    Java有很多的设计模式,但是让我们一个个分析出来,可能就一脸蒙逼了,今天就和大家一块来分析一下Java中的一些常用的设计模式。今天先分析单例模式

    单例模式的好处


    举个例子:有一个类,里面有若干个公共方法,现在我项目中有200个页面会调用到这个类中的方法,怎么办?我们正常的思路可能是获取该类的实例对象,A a = new A(); 然后通过对象a,拿到里面的方法,这种思路是没有问题的,
    但是,如果一个项目中有200个页面调用该类,我们是不是就得new 200个对象,这对内存是极大的浪费,但是单例就可以完美的解决了这样的情况。

    饿汉式

     1 package com.mjj.recyclerviewlocation;
     2 
     3 /**
     4  * Created by Administrator on 2017/11/15 0015.
     5  * huangjialin
     6  */
     7 public class SingletonTest {
     8 
     9     private static SingletonTest  singletonTest = new SingletonTest();
    10 
    11     /**
    12      * 饿汉式
    13      * @return
    14      */
    15     public static SingletonTest getInstance(){
    16         return singletonTest;
    17     }
    18 }

    看起来是不是简单粗暴,这种好处就是节省了时间,需要的时候,直接返回,省去了创建的时间,缺点就是一直占用内容。

    懒汉式

     1 package com.mjj.recyclerviewlocation;
     2 
     3 /**
     4  * Created by Administrator on 2017/11/15 0015.
     5  * huangjialin
     6  */
     7 
     8 public class SingletonTest {
     9     private static SingletonTest singletonTest;
    10 
    11     public SingletonTest() {
    12     }
    13 
    14     /**
    15      * 懒汉式
    16      * @return
    17      */
    18     public static SingletonTest getSingletonTest() {
    19         if (singletonTest == null) {
    20             synchronized (SingletonTest.class) {
    21                 if (singletonTest == null) {
    22                     singletonTest = new SingletonTest();
    23                 }
    24             }
    25 
    26         }
    27 
    28 
    29         return singletonTest;
    30     }
    31 
    32 
    33 }

    懒汉式相对于恶汉式来说,代码多一些,但是好处呢就是不占用内存,缺点就是相对恶汉式来说比较耗时。
    可能很多人无法理解外层有了一个判断,里面为什么还需要一个判断?这是为了预防高并发的情况,从而达到线程安全。

    上面两种,线程都是安全的,选用那种,取决与自己的实际情况。

  • 相关阅读:
    韩式英语
    Daily dictation 听课笔记
    words with same pronunciation
    you will need to restart eclipse for the changes to take effect. would you like to restart now?
    glottal stop(britain fountain mountain)
    education 的发音
    第一次用Matlab 的lamada语句
    SVN的switch命令
    String的split
    SVN模型仓库中的资源从一个地方移动到另一个地方的办法(很久才解决)
  • 原文地址:https://www.cnblogs.com/huangjialin/p/7838713.html
Copyright © 2020-2023  润新知