码迷,mamicode.com
首页 > 其他好文 > 详细

单例(LintCode)

时间:2015-12-05 22:31:46      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:

单例

单例 是最为最常见的设计模式之一。对于任何时刻,如果某个类只存在且最多存在一个具体的实例,那么我们称这种设计模式为单例。例如,对于 class Mouse (不是动物的mouse哦),我们应将其设计为 singleton 模式。

你的任务是设计一个 getInstance 方法,对于给定的类,每次调用 getInstance 时,都可得到同一个实例。

样例

在 Java 中:

A a = A.getInstance();
A b = A.getInstance();

a 应等于 b.

挑战

如果并发的调用 getInstance,你的程序也可以正确的执行么?

 

首先肯定想到的是定义一个private static Solution成员,这样这个成员就独立于所有的实例了。至于线程安全我百度了一下,有一个关键字volatile。

Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

 

具体的可以看百度百科

技术分享
 1 class Solution {
 2     /**
 3      * @return: The same instance of this class every time
 4      */
 5     private Solution(){};
 6     private static volatile Solution instance;
 7     static {
 8         instance = new Solution();
 9     }
10     public static Solution getInstance() {
11         return instance;
12     }
13 };
View Code

 

 

 

单例(LintCode)

标签:

原文地址:http://www.cnblogs.com/FJH1994/p/5022272.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!