当Singleton模式类实现Serializable

来源:互联网 发布:web页面和数据库表 编辑:程序博客网 时间:2024/05/16 16:07

package com.yinbodotcc;

import java.io.*;
public class CopyDog
{ // Not to be confused with copycat
 public static void main(String[] args)
 {
  Dog newDog = (Dog) deepCopy(Dog.INSTANCE);
  System.out.println(newDog == Dog.INSTANCE);
  System.out.println(newDog);
 }
// This method is very slow and generally a bad idea!
 static public Object deepCopy(Object obj)
 {
  try
  {
   ByteArrayOutputStream bos =new ByteArrayOutputStream();
   new ObjectOutputStream(bos).writeObject(obj);
   ByteArrayInputStream bin =new ByteArrayInputStream(bos.toByteArray());
   return new ObjectInputStream(bin).readObject();
  }
  catch(Exception e)
  {
   throw new IllegalArgumentException(e);
  }
 }
}

 class Dog implements Serializable
 {
 public static final Dog INSTANCE = new Dog();
 private Dog() {}
 public String toString()
 {
  return "Woof";
 }

//如果没有下面的这个部分,则会打印为false,说明真的不是Singleton
 private Object readResolve()
 {

  return INSTANCE;
 }
 

原创粉丝点击