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;
}
}