• 单例模式


    昨天笔试考到了单例模式,现在重新总结一下吧。

    一、什么是单例模式

      单例模式是一种对象创建型模式,使用单例模式,可以保证一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。

      其实,gof对单例模式的定义是:保证一个类只有一个实例存在,同时提供能够对该实例加以访问的全局访问方法。

    二、为什么要使用单例模式

      在应用系统开发中,我们常常有一下需求:

      1.在多个线程之间,比如servlet环境,共享统一个资源或者操作统一个对象

      2.在整个程序空间使用全局变量,共享资源

      3.大规模系统中,为了性能的考虑,需要节省对象的创建时间等。

      因为Singleton模式可以保证为一个类只生成唯一的实例对象,所以这些情况,Singleton模式就派上用场了。

    三、单例模式实现

    1.饿汉式

    饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变

     1 package com.bingoogol.designpattern.singleton;
     2 
     3 /**
     4  * 饿汉式
     5  * 
     6  * @author bingoogol@sina.com
     7  */
     8 public class SingletonA {
     9     
    10     private static SingletonA instance = new SingletonA();
    11 
    12     /**
    13      * 构造方法必须是私有的
    14      */
    15     private SingletonA() {
    16     }
    17     
    18     /**
    19      * 提供能够对该实例加以访问的全局访问方法
    20      * @return
    21      */
    22     public static SingletonA getInstance() {
    23         return instance;
    24     }
    25 }
    查看代码

    2.懒汉式

     1 package com.bingoogol.designpattern.singleton;
     2 
     3 /**
     4  * 懒汉式
     5  * 
     6  * @author bingoogol@sina.com
     7  */
     8 public class SingletonB {
     9     private static SingletonB instance = null;
    10 
    11     private SingletonB() {
    12     }
    13     
    14     //这种方式的坏处是,当有线程在占有该资源时,其他线程都必须在该方法外部等待
    15     public static synchronized SingletonB getInstance() {
    16         if (instance == null) {
    17             instance = new SingletonB();
    18         }
    19         return instance;
    20     }
    21 }
    查看代码

    3.双重检查

     1 package com.bingoogol.designpattern.singleton;
     2 
     3 /**
     4  * 双重检测
     5  * 
     6  * @author bingoogol@sina.com
     7  */
     8 public class SingletonC {
     9     private static SingletonC instance = null;
    10 
    11     private SingletonC() {
    12     }
    13 
    14     public static SingletonC getInstance() {
    15         if (instance == null) {
    16             // [1]
    17             synchronized (SingletonC.class) {
    18                 if (instance == null) {
    19                     //线程一在此之前线程二到达了位置[1],如果此处不二次判断,那么线程二执行到这里的时候还会重新new
    20                     instance = new SingletonC();
    21                 }
    22             }
    23         }
    24         return instance;
    25     }
    26 }
    查看代码
  • 相关阅读:
    浏览器 页面报错
    TP单字母函数
    TP系统常量、项目后台的搭建、模板中常量字符串替换
    ThinkPHP3.2的简单知识
    面向对象基本概念,关键字,类的组成,静态,三大特性,创建类和对象,设计模式
    layui(弹出层)
    头像文件上传 方法一:from表单 方法二:ajax
    上传文件
    流程增加,发起事件,流程显示,处理。
    分页,条件查找后再分页
  • 原文地址:https://www.cnblogs.com/bingoogol/p/DesignPattern-singleton.html
Copyright © 2020-2023  润新知