zoukankan      html  css  js  c++  java
  • 设计模式之单例模式

    设计模式:解决某一类问题最行之有效的方法。

    Java中有23种设计模式。

    单例模式:解决一个类在内存中只存在一个对象。

    如何用代码实现?

    1.将构造函数私有化;

    2.在类中创建一个本类对象;

    3.提供一个方法可以获取到该对象。

    单例模式有两种方法实现:

    一、懒汉式

    对象是方法被调用时才初始化。

    Single类进内存,对象还没有存在,只有调用了getInstance()方法时,才建立对象。

    class Single{

      private static Single s=null;

      private Single(){}

      public static Single getInstance()

      {

        if(s==null){

          s=new Single();

        }

        return s;

      }

    }

    二、饿汉式

    先初始化对象,Single类一进内存,就已经创建好了对象。
    class Single{

      private static Single s=new Single();

      private Single(){}

      public static Single getInstance(){

        return s;

      }

    }

    开发一般用饿汉式,因为它安全简单。

    如果用懒汉式,当多个程序同时访问时,就有可能出现问题,解决方案:

    方案一:

    class Single{

      private static Single s=null;

      private Single(){}

      public static synchronized Single getInstance(){//加同步锁,一次只能进来一个,缺点:判断次数太多,影响速度。

        s=new Single();
      }

      return s;

    }

    方案二:

    class Single{

      private static Single s=null;

      private Single(){}

      public static Single getInstance(){

        if(s==null){

          Synchronized(Single.class){

            if(s==null){

     /*

    cpu轮流切换运行程序,当A进来,cpu切过去了,没有运行A的时候,A就被挂起,B就不能进来了,因为有同步锁。当C进来的时候,此时s!=null,就不会判断同步锁问题,这样减少了判断次数,速度会快点。

    */

              s=new Single(); 

            }

          }

        return s;

        }

      }

    }

  • 相关阅读:
    js MD5加密后的字符串
    <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
    归并排序
    C#分解质因数
    C#找出第n到m个素数之间所有之和
    C#打印0到100的素数
    for循环练习
    express总结(一)
    Nodejs总结(一)
    Webpack配置及使用
  • 原文地址:https://www.cnblogs.com/Joanna-Yan/p/4593195.html
Copyright © 2011-2022 走看看