素材巴巴 > 程序开发 >

设计模式-单例模式[Singleton]

程序开发 2023-09-14 14:13:40

本文为作者原创,转载请在明显位置标明出处:http://www.cnblogs.com/masque/p/3860746.html

有些对象其实我们只需要一个,比方说:线程池,缓存,日志对象.如果制造多个实例会产生程序异常.

方法一:

 1 package org.masque.designpatterns.singleton.one;
  2 /**
  3  * 
  4  * Description:
  5  * Singleton.java Create on 2014年7月22日 下午2:24:09 
  6  * @author masque.java@outlook.com
  7  * @version 1.0
  8  * Copyright (c) 2014 Company,Inc. All Rights Reserved.
  9  */
 10 public class Singleton {
 11     /**
 12      * 私有化无参构造方法,防止new 关键字创建对象
 13      */
 14     private Singleton(){}
 15     
 16     /**
 17      * 1.5或更新的版本才支持volatile关键字
 18      */
 19     private volatile static Singleton singleton ;
 20     
 21     public static Singleton getInstance(){
 22         if (singleton==null) {
 23             synchronized (Singleton.class) {
 24                 if (singleton==null) {
 25                     singleton = new Singleton();
 26                 }
 27             }
 28         }
 29         return singleton;
 30     }
 31     
 32     //省略其他方法
 33 }

方法二:

 1 package org.masque.designpatterns.singleton.two;
  2 /**
  3  * 
  4  * Description:
  5  * Singleton.java Create on 2014年7月22日 下午2:24:09 
  6  * @author masque.java@outlook.com
  7  * @version 1.0
  8  * Copyright (c) 2014 Company,Inc. All Rights Reserved.
  9  */
 10 public class Singleton {
 11     /**
 12      * 私有化无参构造方法,防止new 关键字创建对象
 13      */
 14     private Singleton(){}
 15     
 16     private static Singleton singleton = new Singleton();
 17     
 18     public static Singleton getInstance(){
 19         return singleton;
 20     }
 21     
 22     //省略其他方法
 23 }

方法三:

 1 package org.masque.designpatterns.singleton.three;
  2 /**
  3  * 
  4  * Description:
  5  * Singleton.java Create on 2014年7月22日 下午2:24:09 
  6  * @author masque.java@outlook.com
  7  * @version 1.0
  8  * Copyright (c) 2014 Company,Inc. All Rights Reserved.
  9  */
 10 public class Singleton {
 11     /**
 12      * 私有化无参构造方法,防止new 关键字创建对象
 13      */
 14     private Singleton(){}
 15     
 16     private static Singleton singleton ;
 17     
 18     public static synchronized Singleton getInstance(){
 19         if (singleton==null) {
 20             singleton = new Singleton();
 21         }
 22         return singleton;
 23     }
 24     
 25     //省略其他方法
 26 }

方法四:

 1 package org.masque.designpatterns.singleton.four;
  2 /**
  3  * 
  4  * Description:
  5  * Singleton.java Create on 2014年7月22日 下午2:24:09 
  6  * @author masque.java@outlook.com
  7  * @version 1.0
  8  * Copyright (c) 2014 Company,Inc. All Rights Reserved.
  9  */
 10 public enum Singleton {
 11     /**
 12      * 枚举类型只有一个实例
 13      * (1.5或更新的版本才支持枚举)
 14      */
 15     SINGLETON;
 16     
 17     //省略其他方法
 18 }

方法五:

 1 package org.masque.designpatterns.singleton.five;
  2 /**
  3  * 
  4  * Description:
  5  * Singleton.java Create on 2014年7月22日 下午2:24:09 
  6  * @author masque.java@outlook.com
  7  * @version 1.0
  8  * Copyright (c) 2014 Company,Inc. All Rights Reserved.
  9  */
 10 public class Singleton {
 11     /**
 12      * 私有化无参构造方法,防止new 关键字创建对象
 13      */
 14     private Singleton(){}
 15     
 16     private static Singleton singleton ;
 17     
 18     public static Singleton getInstance(){
 19         /**
 20          * 若并发执行 singleton==null 就会产生多个对象了
 21          */
 22         if (singleton==null) {
 23             singleton = new Singleton();
 24         }
 25         return singleton;
 26     }
 27     
 28     //省略其他方法
 29 }

个人认为枚举是实现单利的最佳方式

转载于:https://www.cnblogs.com/masque/p/3860746.html


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。