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;

        }

      }

    }

  • 相关阅读:
    php中如何实现在线网友
    用php与mysql的电子贺卡代码
    基于PHP MySQL的聊天室设计
    xml php动态载入与分页
    模拟OICQ的实现思路和核心程序
    FC4下安装plog快速指南(plog版本:1.01)
    一个简单的php在线端口扫描器
    UVA 10604 Chemical Reaction(六维dp数组)
    HDU 1503 Advanced Fruits
    hust 1607 Triangles(经典好题)
  • 原文地址:https://www.cnblogs.com/Joanna-Yan/p/4593195.html
Copyright © 2011-2022 走看看