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

      单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例,单例模式有以下特点:

        1、单例类只能有一个实例。 

        2、单例类必须自己自己创建自己的唯一实例。 

        3、单例类必须给所有其他对象提供这一实例。

      单例模式分为懒汉模式和饿汉模式:

        懒汉模式在程序在第一次调用实例化。是线程不安全的。但是可以通过改写方法使其安全。

        饿汉模式在加载时即开始实例化,确保在调用时已经存在了实例。是线程安全的,但是内存开销似乎有点大。

      懒汉式范例代码:

     1 public class Singleton {  
     2     //私有化默认构造器
     3     private Singleton() {}  
     4     private static Singleton single=null;  
     5     //静态工厂方法   
     6     public static Singleton getInstance() {  
     7          if (single == null) {    
     8              single = new Singleton();  
     9          }    
    10         return single;  
    11     }  
    12 }  

      饿汉式范例代码:

    1 public class Singleton {  
    2     private Singleton() {}  
    3     private static final Singleton single = new Singleton();  
    4     public static Singleton getInstance() {  
    5         return single;  
    6     }  
    7 }  

      懒汉式线程安全改进,方法1:

     1 public class Singleton {  
     2      //私有化默认构造器
     3      private Singleton() {}  
     4      private static Singleton single=null;  
     5      //静态工厂方法(加上同步方法)   
     6      public static Singleton Synchronized getInstance() {  
     7           if (single == null) {    
     8               single = new Singleton();  
     9          }    
    10         return single;  
    11     }  
    12  }  

      方法2:

     1 public class Singleton     
     2 {        
     3     //私有化构造器
     4     private Singleton(){}     
     5     //静态内部类
     6     private static class SingletonHoledr(){     
     7         private static final Singleton instance = new Singleton();     
     8     }     
     9    //静态工厂方法
    10     public static final Singleton getInstance(){     
    11         return SingletonHoledr.instance;     
    12     }     
    13 } 

      一般本人比较钟情于用方法2。关于单例模式还有很多未涉及到。本文是本人学习笔记,如果引用请慎重。

      还有如果哪位仁兄发现有错误的麻烦帮留个言,以便改正。

  • 相关阅读:
    .NET 去除一段文本中的HTML标记
    C#实现控件拖动窗口
    使用window.showModalDialog弹出窗口返回值(兼容IE、FF、chrome)
    IE浏览器报错出现stack overflow at line 0的解决办法
    用Python作GIS:原料篇
    winform 自定义控件:半透明Loading控件
    WPF 跟随鼠标动画 by wgscd
    C# 多线程 HTTP request
    VS2015 安装XAN
    C# 用QQ企业邮箱发邮件
  • 原文地址:https://www.cnblogs.com/hais/p/4700803.html
Copyright © 2011-2022 走看看