zoukankan      html  css  js  c++  java
  • 常见的设计模式 ----- 单例模式

    单例模式(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。

    例1:最常用的单例模式

     1 public class SingleDemo {
     2 
     3     // 在类加载的同时已经创建好一个静态对象,调用时反应速度快
     4     // 资源利用率不高
     5     private static SingleDemo obj = new SingleDemo();
     6 
     7     // 私有构造函数
     8     private SingleDemo (){
     9     }
    10     
    11     public static SingleDemo getInstance() {
    12         return obj;
    13     }
    14 }

    例2:资源利用率高的单例

     1 public class SingleDemo {
     2 
     3     // 私有构造函数
     4     private SingleDemo (){}
     5 
     6     // 静态内部类
     7     // 资源利用率高, 不执行getInstance就不会被实例,可以执行该类其他静态方法
     8     public static class SingleFactory {
     9         public static SingleDemo obj = new SingleDemo();
    10     }
    11 
    12     public static SingleDemo getInstance() {
    13         return SingleFactory.obj;
    14     }
    15 }

    例3:不推荐使用的单例

     1 public class SingleDemo {
     2 
     3     // 对象实例
     4     private static SingleDemo obj;
     5 
     6     // 私有构造函数
     7     private SingleDemo (){}
     8 
     9     // 获得该类的一个实例,多线程的场合,要考虑排它锁
    10     // 可以对该方法加锁,也可以对该实例加锁
    11     // 加锁,能够保证在同一时刻最多只有一个线程执行该段代码。
    12     // 对该方法加锁的话,可能会影响系统的并发效率,增加系统开销
    13     public static synchronized SingleDemo getInstance() {
    14         
    15         if (obj == null) {
    16             obj = new SingleDemo();
    17             return obj;
    18         }
    19         return obj;
    20     }
    21 
    22     // 对该实例加锁的例子
    23     // 不推荐使用,在obj分配内存但还未初始化的时候,容易出错
    24     public static SingleDemo getInstance2() {
    25         
    26         if (obj == null) {
    27             synchronized (obj) {
    28                 if (obj == null) {
    29                     obj = new SingleDemo();
    30                 }
    31             }
    32         }
    33         return obj;
    34     }
    35 }
  • 相关阅读:
    转: adroid音视延迟 10ms的原因与解答
    去应聘软件工程师记得这样介绍自己
    U盘中了磁碟机病毒怎么办
    Heartbeats
    视频格式研究
    开源镜像站汇总
    Linux各目录缩写含义
    虚拟中没有eth0
    使用#锚点时,jsp中不能有basePath
    android systemUI--Notification 整理
  • 原文地址:https://www.cnblogs.com/keyiei/p/3594033.html
Copyright © 2011-2022 走看看