设计模式-单例模式[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
标签:
相关文章
-
无相关信息
