当前位置:编程学习 > JAVA >>

java单例模式???

求一个java单例模式,要完整的,面试时可能会用到??在单例模式中是不是一定要重写clone()方法呀?
在线等啊??
最好可以分享一下大家面试java的经验 --------------------编程问答-------------------- http://freish.iteye.com/admin/blogs/1008304

单例是不需要继承Cloneable接口 --------------------编程问答-------------------- 只有一个实例 网上很多 --------------------编程问答-------------------- private static XXX x = null;
public XXX getXXX() {
   if (null == x) {
       x = new XXX();
   }
   return x;
}

--------------------编程问答-------------------- 摘抄自<研磨设计模式>

单例模式示例代码

        在Java中,单例模式的实现又分为两种,一种称为懒汉式,一种称为饿汉式,其实就是在具体创建对象实例的处理上,有不同的实现方式。下面分别来看这两种实现方式的代码示例。为何这么写,具体的在后面再讲述。
       (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 class Singleton {
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 TestClass test;
public static synchronized simp (
      //判断是否已存在
     if(test != null)
       {
         return test;
        }
      test = new TestClass();
      return test;
    
)
--------------------编程问答--------------------

public final class Singleton
{
private static Singleton instance = new Singleton();


private Singleton(){}


public Singleton getInstance()
{
return instance;
}
}


--------------------编程问答-------------------- 4L,6L的方法不太好,synchronized方法,容易造成堵塞,影响性能
7L的要把getInstance声明为static方法,这个是一般做法
5L的通过系统类加载器保证线程安全,可以滞后生成实例,省资源
--------------------编程问答--------------------
引用 3 楼 nobullet 的回复:
private static XXX x = null;
public XXX getXXX() {
  if (null == x) {
  x = new XXX();
  }
  return x;
}


只有一个实例,就这样,直观! --------------------编程问答-------------------- 1.提供一个私有的静态的该类成员。
2.提供一个私有的构造方法,主体为空。(只让本类new)
3.提供一个公有的静态的获得该实例的方法。

饱汉和恶汉说的是静态成员变量是不是在定义的时候就new了。 --------------------编程问答--------------------
public final class Singleton
{
    private static Singleton instance = new Singleton();
    

    private Singleton(){}

    
    public Singleton getInstance()
    {
        return instance;
    }
}

--------------------编程问答-------------------- private static XXX x = null;
public XXX getXXX() {
if (null == x) {
x = new XXX();
}
return x;
}

不错,理解喽!~~ --------------------编程问答--------------------
引用 10 楼 centre10 的回复:
1.提供一个私有的静态的该类成员。
2.提供一个私有的构造方法,主体为空。(只让本类new)
3.提供一个公有的静态的获得该实例的方法。

饱汉和恶汉说的是静态成员变量是不是在定义的时候就new了。


总结的不错,让你一个说完了
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,