zoukankan      html  css  js  c++  java
  • Java笔记(十一)……单例设计模式

    设计模式

    解决某一类问题最行之有效的方法

    Java中有23中设计模式

    单例设计模式

    解决一个类在内存中只存在一个对象

    思路

      1. 将构造函数私有化
      2. 在类中创建一个本类对象
      3. 提供一个方法可以获取到对象

    两种方法

    饿汉式:类建立时分配对象

       1: class Single
       2: {
       3:     private Single(){}
       4:     //类建立时即初始化了对象
       5:     private static Single s = new Single();
       6:     public static Single getInstance()
       7:     {
       8:         return s;
       9:     }
      10: }

    懒汉式:调用时才分配对象,也叫做对象的延时加载

       1: class Single
       2: {
       3:     private Single(){}
       4:     private static Single s;
       5:     public static Single getInstance()
       6:     {
       7:         //调用时再分配对象
       8:         if(s == null)
       9:             s = new Single();
      10:         return s;
      11:     }
      12: }

    但是此懒汉式如果是多线程调用,容易出现new多个对象的问题,解决方法如下:

       1: class Single
       2: {
       3:     private Single(){}
       4:     private static Single s;
       5:     public static Single getInstance()
       6:     {
       7:         //调用时再分配对象
       8:         //为了避免每次都访问锁而设置的判断
       9:         if(s == null)
      10:         {
      11:             //加锁防止多线程调用时问题
      12:             synchronized(Single.class)
      13:             {
      14:                 if(s == null)
      15:                 {
      16:                     s = new Single();
      17:                 }
      18:             }
      19:         }
      20:         return s;
      21:     }
      22: }

    对比之下发现:

    懒汉式代码较多,而且不安全,所以建议使用饿汉式。

  • 相关阅读:
    [GXYCTF2019]BabyUpload
    [GYCTF2020]Blacklist
    [极客大挑战 2019]HardSQL
    PHP实现MVC框架路由功能模式
    色环电阻的阻值识别
    python的内存回收机制
    配置Openfiler做ISCS实验
    windows server 2008r2 在vmware里自动关机
    VMware Workstation网络修改vlan id值
    linux的服务自动启动的配置
  • 原文地址:https://www.cnblogs.com/ShawnWithSmallEyes/p/3373914.html
Copyright © 2011-2022 走看看