求一个java单例模式,要完整的,面试时可能会用到??在单例模式中是不是一定要重写clone()方法呀?
在线等啊??
最好可以分享一下大家面试java的经验
在线等啊??
最好可以分享一下大家面试java的经验
解决方案 »
- 一个关于java的小程序
- 请教一个问题
- 谁能帮我分析下这段简单的freemarker代码
- amchart 中文乱码问题
- 怎么删除list里面的内容,本个一直在线急等。进来回复就有加分啊!!!!!!!!
- 求助:org.hibernate.exception.SQLGrammarException: could not insert:
- hibernate连接数据库的问题!!
- 问一个distinct的问题,不知道有没有解决的办法?
- Weblogic8.1控制台的初始用户名和密码应该是什么呀?安装时没有提示输入呀!(内空)
- JBuilder9新问题??????????????
- 关于在火狐浏览器不能跳转的问题
- ireport summary 高度不够怎么办啊
public XXX getXXX() {
if (null == x) {
x = new XXX();
}
return x;
}
(1)懒汉式实现,示例代码如下:Java代码
1./**
2. * 懒汉式单例实现的示例
3. */
4.public class Singleton {
5. /**
6. * 定义一个变量来存储创建好的类实例
7. */
8. private static Singleton uniqueInstance = null;
9. /**
10. * 私有化构造方法,好在内部控制创建实例的数目
11. */
12. private Singleton(){
13. //
14. }
15. /**
16. * 定义一个方法来为客户端提供类实例
17. * @return 一个Singleton的实例
18. */
19. public static synchronized Singleton getInstance(){
20. //判断存储实例的变量是否有值
21. if(uniqueInstance == null){
22. //如果没有,就创建一个类实例,并把值赋值给存储类实例的变量
23. uniqueInstance = new Singleton();
24. }
25. //如果有值,那就直接使用
26. return uniqueInstance;
27. }
28. /**
29. * 示意方法,单例可以有自己的操作
30. */
31. public void singletonOperation(){
32. //功能处理
33. }
34. /**
35. * 示意属性,单例可以有自己的属性
36. */
37. private String singletonData;
38. /**
39. * 示意方法,让外部通过这些方法来访问属性的值
40. * @return 属性的值
41. */
42. public String getSingletonData(){
43. return singletonData;
44. }
45.}
/**
* 懒汉式单例实现的示例
*/
public class Singleton {
/**
* 定义一个变量来存储创建好的类实例
*/
private static Singleton uniqueInstance = null;
/**
* 私有化构造方法,好在内部控制创建实例的数目
*/
private Singleton(){
//
}
/**
* 定义一个方法来为客户端提供类实例
* @return 一个Singleton的实例
*/
public static synchronized Singleton getInstance(){
//判断存储实例的变量是否有值
if(uniqueInstance == null){
//如果没有,就创建一个类实例,并把值赋值给存储类实例的变量
uniqueInstance = new Singleton();
}
//如果有值,那就直接使用
return uniqueInstance;
}
/**
* 示意方法,单例可以有自己的操作
*/
public void singletonOperation(){
//功能处理
}
/**
* 示意属性,单例可以有自己的属性
*/
private String singletonData;
/**
* 示意方法,让外部通过这些方法来访问属性的值
* @return 属性的值
*/
public String getSingletonData(){
return singletonData;
}
}
(2)饿汉式实现,示例代码如下:Java代码
1./**
2. * 饿汉式单例实现的示例
3. */
4.public class Singleton {
5. /**
6. * 定义一个变量来存储创建好的类实例,直接在这里创建类实例,只会创建一次
7. */
8. private static Singleton uniqueInstance = new Singleton();
9. /**
10. * 私有化构造方法,好在内部控制创建实例的数目
11. */
12. private Singleton(){
13. //
14. }
15. /**
16. * 定义一个方法来为客户端提供类实例
17. * @return 一个Singleton的实例
18. */
19. public static Singleton getInstance(){
20. //直接使用已经创建好的实例
21. return uniqueInstance;
22. }
23.
24. /**
25. * 示意方法,单例可以有自己的操作
26. */
27. public void singletonOperation(){
28. //功能处理
29. }
30. /**
31. * 示意属性,单例可以有自己的属性
32. */
33. private String singletonData;
34. /**
35. * 示意方法,让外部通过这些方法来访问属性的值
36. * @return 属性的值
37. */
38. public String getSingletonData(){
39. return singletonData;
40. }
41.}
/**
* 饿汉式单例实现的示例
*/
public class Singleton {
/**
* 定义一个变量来存储创建好的类实例,直接在这里创建类实例,只会创建一次
*/
private static Singleton uniqueInstance = new Singleton();
/**
* 私有化构造方法,好在内部控制创建实例的数目
*/
private Singleton(){
//
}
/**
* 定义一个方法来为客户端提供类实例
* @return 一个Singleton的实例
*/
public static Singleton getInstance(){
//直接使用已经创建好的实例
return uniqueInstance;
}
/**
* 示意方法,单例可以有自己的操作
*/
public void singletonOperation(){
//功能处理
}
/**
* 示意属性,单例可以有自己的属性
*/
private String singletonData;
/**
* 示意方法,让外部通过这些方法来访问属性的值
* @return 属性的值
*/
public String getSingletonData(){
return singletonData;
}
}
摘抄自<研磨设计模式>
public String name;
public int age; private Singleton(){
System.out.println("当前线程 "+Thread.currentThread().getName()+" 对象是 "+this.toString());
}
public static Singleton getInstance(){
return SingletonHolder.getInstance();
}
private static class SingletonHolder{
private static final Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static synchronized simp (
//判断是否已存在
if(test != null)
{
return test;
}
test = new TestClass();
return test;
)
{
private static Singleton instance = new Singleton();
private Singleton(){}
public Singleton getInstance()
{
return instance;
}
}
7L的要把getInstance声明为static方法,这个是一般做法
5L的通过系统类加载器保证线程安全,可以滞后生成实例,省资源
2.提供一个私有的构造方法,主体为空。(只让本类new)
3.提供一个公有的静态的获得该实例的方法。饱汉和恶汉说的是静态成员变量是不是在定义的时候就new了。
public final class Singleton
{
private static Singleton instance = new Singleton();
private Singleton(){}
public Singleton getInstance()
{
return instance;
}
}
public XXX getXXX() {
if (null == x) {
x = new XXX();
}
return x;
}不错,理解喽!~~