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

    单例模式是最简单,但也是比较常用的模式之一。

    单例模式:确保一个类只有一个实例对象,并提供一个全局访问点。

    有一些类的实例对象,我们只需要一个,比如说:线程池,缓存,对话框,处理偏好设置和注册表的对象,日志对象,充当打印机、显卡等设备的驱动程序的对象。事实上,这些类的对象有且只能有一个实例对象,如果制造出多个实例对象,就会导致许多的

    问题产生。例如:程序的行为异常,资源使用过量,或者是不一致的结果。

    单例模式的核心思想就一条:将构造器私有化,通过类的静态方法返回唯一的类的实例对象。

    立即加载实例的形式:

     1 /**
     2  * 单例模式的立即加载模式  
     3  * @author wly
     4  *
     5  */
     6 public class RightNowGetInstance {
     7    //只要这个类 被加载  就获得这个类的是一个实例对象
     8    private  static RightNowGetInstance  rn = new RightNowGetInstance();  
     9    //将构造器私有化   其他类不能通过 new来调用这个构造器
    10    private  RightNowGetInstance()
    11    {
    12        
    13    }
    14    //通过静态方法 返回这个类的唯一的实例对象
    15    public static RightNowGetInstance  getInstance()
    16    {
    17        return rn;
    18    }
    19 }

     延迟加载实例的形式:

     1 /**
     2  * 单例模式的 延迟加载模式
     3  * @author wly
     4  *
     5  */
     6 public class DelayGetInstance {
     7    //声明一个变量 用来引用 将要产生的唯一的实例对象
     8    private  static  DelayGetInstance  dgi;
     9    //将构造器私有化   其他类不能通过new来调用这个构造器 来产生实例对象
    10    private  DelayGetInstance()
    11    {
    12        
    13    }
    14    //通过静态方法 返回这个类的唯一的实例对象   
    15    //synchronized关键字  迫使每条线程进入这个方法之前必须等到别的线程离开该方法,也就是说不能有两条线程同时进入这个方法
    16    public static synchronized DelayGetInstance  getInstance()
    17    {
    18        if(dgi == null)           //dgi为空  ,表示还没有一个实例对象    new一个实例对象返回
    19        {                         //dgi不为空 ,表示前面已经创建了一个实例对象  ,直接返回前面创建的实例对象
    20            dgi = new DelayGetInstance();
    21        }
    22        return dgi;
    23    }
    24 }
  • 相关阅读:
    PHP Notice: Undefined index:解决方法
    javascript监听手机返回键
    jquery判断手指滑动方向
    php 5.5使用 array_column的方法
    html5 点击播放video的方法
    mysql并发量过大造成 update语句更新错误
    html5 微信真机调试方法vConsole
    PHP防止客户端多次点击
    jquery设置html5音量的方法
    设计模式六大原则
  • 原文地址:https://www.cnblogs.com/wangliyue/p/4207867.html
Copyright © 2011-2022 走看看